app/src/main/assets/students_file.json
@@ -1,10 +1,5 @@ [ { "stu_id":1000, "ID": "410923198910162546", "name": "张三", "sex":1 }, { "stu_id":1001, "ID": "410923198910162545", app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -47,4 +47,7 @@ public static final String RTK_CONFIG_JSON = "rtk_config.json"; public static final String BIND_DRIVING_TOPIC = "driving"; public static final long TEST_STU_ID = 1001; //I类评判表 public static final int SUBJECT_I = 1; } app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -24,6 +24,9 @@ import safeluck.drive.evaluation.DB.failitems.FailProjDao; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProjWorker; import safeluck.drive.evaluation.DB.rtktb.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKConfigDao; import safeluck.drive.evaluation.DB.rtktb.RTKConfigWork; /** @@ -32,7 +35,7 @@ * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class},version = 2,exportSchema = false) @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class},version = 1,exportSchema = false) public abstract class WorkRoomDataBase extends RoomDatabase { private static final String TAG = "WorkRoomDataBase"; public abstract StudentDao getstudentDao(); @@ -47,13 +50,13 @@ private static final int NUMBER_OF_THREADS = 4; public static final ExecutorService dataBaseWriteExecutor = Executors.newFixedThreadPool(NUMBER_OF_THREADS); static Migration migration = new Migration(1,2) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("alter table student_table ADD COLUMN begin_time INTEGER NOT NULL DEFAULT 0"); } }; private static final Migration[] ALL_MIGRATIONS = new Migration[]{migration}; // static Migration migration = new Migration(1,2) { // @Override // public void migrate(@NonNull SupportSQLiteDatabase database) { // database.execSQL("alter table student_table ADD COLUMN begin_time INTEGER NOT NULL DEFAULT 0"); // } // }; //private static final Migration[] ALL_MIGRATIONS = new Migration[]{migration}; public static WorkRoomDataBase getWorkRoomDataBase(final Context mContext){ @@ -63,20 +66,22 @@ if (workRoomDataBase == null){ Log.i(TAG, "getWorkRoomDataBase==null "); workRoomDataBase = Room.databaseBuilder(mContext.getApplicationContext(),WorkRoomDataBase.class,"work_database") .addMigrations(ALL_MIGRATIONS) // .addMigrations(ALL_MIGRATIONS) .addCallback(new Callback() { @Override public void onCreate(@NonNull SupportSQLiteDatabase db) { super.onCreate(db); OneTimeWorkRequest oneTimeWorkRequest = OneTimeWorkRequest.from(SeedDatabaseWorker.class); OneTimeWorkRequest oneTimeWorkRequest1 = OneTimeWorkRequest.from(CriteriaForIWorker.class); OneTimeWorkRequest oneTimeWorkRequest2 = OneTimeWorkRequest.from(FailedProjWorker.class); OneTimeWorkRequest oneTimeWorkRequest3 = OneTimeWorkRequest.from(CriteriaForIIWorker.class); OneTimeWorkRequest oneTimeWorkRequest2 = OneTimeWorkRequest.from(FailedProjWorker.class); OneTimeWorkRequest RTKConfigWorkRequest = OneTimeWorkRequest.from(RTKConfigWork.class); Log.i(TAG, "onCreate: 创建数据库后建立数据表插入数据"); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest1); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest2); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest3); WorkManager.getInstance(mContext).enqueue(RTKConfigWorkRequest); } @Override @@ -93,4 +98,5 @@ } public abstract RTKConfigDao getRTKConfigDao(); } app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailProjDao.java
@@ -43,4 +43,6 @@ @Query("SELECT COUNT(*) from fail_projects where subject=:subject_id") LiveData<Integer> getSubject(int subject_id); @Query("delete from fail_projects") void deleteAll(); } app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj.java
@@ -20,7 +20,7 @@ */ @Entity(tableName = "fail_projects",foreignKeys = {@ForeignKey(entity = CriteriaForI.class, parentColumns = "item_id",childColumns = "emp_id",onDelete = CASCADE),@ForeignKey(entity = CriteriaForII.class, parentColumns = "item_id",childColumns = "emp_id")},indices = @Index(value = {"emp_id"})) parentColumns = "item_id",childColumns = "emp_id",onDelete = CASCADE)},indices = @Index(value = {"emp_id"})) public class FailedProj { @PrimaryKey(autoGenerate = true) private int id; app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjRepository.java
@@ -25,7 +25,7 @@ } public void insert(final FailedProj proj){ public void insert(final FailedProj proj) { WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { @@ -36,7 +36,20 @@ } /** * 删除fail_projects表中所有数据 */ public void deleteAll() { WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { failProjDao.deleteAll(); } }); } /** * 获得科目二 I类考场失败项目扣分项 * * @param stu_id * @return */ @@ -46,6 +59,7 @@ /** * 获得科目二 II类考场失败项目扣分项 * * @param stu_id * @return */ app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjWorker.java
@@ -28,7 +28,6 @@ @NonNull @Override public Result doWork() { MyLog.i(TAG,"预置一条失败项目"); // WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getFailProjDao().insert(new FailedProj(1,5)); //加上这一行会报错,不知道为什么,包key constraint fail崩溃 return Result.success(); } app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfig.java
File was renamed from app/src/main/java/safeluck/drive/evaluation/bean/RTKConfig.java @@ -1,4 +1,7 @@ package safeluck.drive.evaluation.bean; package safeluck.drive.evaluation.DB.rtktb; import androidx.room.Entity; import androidx.room.PrimaryKey; /** * MyApplication2 @@ -6,6 +9,7 @@ * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Entity(tableName = "rtkconfig_table") public class RTKConfig { /** @@ -23,6 +27,7 @@ */ private String ip; private int port; private int province; private int city; @@ -32,7 +37,19 @@ private String phone; private String password; private int registered; @PrimaryKey private int _id; public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } private int interval; public String getIp() { return ip; @@ -121,4 +138,23 @@ public void setInterval(int interval) { this.interval = interval; } @Override public String toString() { return "RTKConfig{" + "ip='" + ip + '\'' + ", port=" + port + ", province=" + province + ", city=" + city + ", model='" + model + '\'' + ", sn='" + sn + '\'' + ", imei='" + imei + '\'' + ", phone='" + phone + '\'' + ", password='" + password + '\'' + ", registered=" + registered + ", interval=" + interval + '}'; } } app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigDao.java
New file @@ -0,0 +1,24 @@ package safeluck.drive.evaluation.DB.rtktb; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import androidx.room.Update; @Dao public interface RTKConfigDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(RTKConfig rtkConfig); @Query("SELECT * from rtkconfig_table") LiveData<RTKConfig> getRTKConfig(); @Update void update(RTKConfig rtkConfig); @Query("SELECT * from rtkconfig_table") RTKConfig getRTKConfigNoLive(); } app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigViewModel.java
New file @@ -0,0 +1,29 @@ package safeluck.drive.evaluation.DB.rtktb; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; public class RTKConfigViewModel extends AndroidViewModel { RTKWorkRepository rtkWorkRepository; public RTKConfigViewModel(@NonNull Application application) { super(application); rtkWorkRepository = new RTKWorkRepository(application); } public void insertRTKConfig(final RTKConfig rtkConfig){ rtkWorkRepository.insertRTKConfig(rtkConfig); } public LiveData<RTKConfig> getRTKConfig(){ return rtkWorkRepository.getRTKConfig(); } public void update(final RTKConfig rtkConfig){ rtkWorkRepository.update(rtkConfig); } } app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigWork.java
New file @@ -0,0 +1,50 @@ package safeluck.drive.evaluation.DB.rtktb; import android.content.Context; import androidx.annotation.NonNull; import androidx.work.Worker; import androidx.work.WorkerParameters; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.List; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.Student; import safeluck.drive.evaluation.DB.WorkRoomDataBase; import safeluck.drive.evaluation.util.FileUtil; public class RTKConfigWork extends Worker { private Context context; public RTKConfigWork(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); this.context = context; } @NonNull @Override public Result doWork() { try { InputStream inputStream = getApplicationContext().getAssets().open(Constant.RTK_CONFIG_JSON); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); JsonReader jsonReader = new JsonReader(inputStreamReader); Gson gson = new Gson(); Type type = new TypeToken<RTKConfig>(){}.getType(); RTKConfig mstus=gson.fromJson(jsonReader, type); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getRTKConfigDao().insert(mstus); } catch (IOException e) { e.printStackTrace(); return Result.failure(); } return Result.success(); } } app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKWorkRepository.java
New file @@ -0,0 +1,64 @@ package safeluck.drive.evaluation.DB.rtktb; import android.app.Application; import androidx.lifecycle.LiveData; import com.anyun.exam.lib.MyLog; import safeluck.drive.evaluation.DB.WorkRoomDataBase; public class RTKWorkRepository { private static final String TAG = "RTKWorkRepository"; private RTKConfigDao rtkConfigDao; private LiveData<RTKConfig> rtkConfig; private RTKConfig rtkConfig1; public RTKWorkRepository(Application application) { rtkConfigDao = WorkRoomDataBase.getWorkRoomDataBase(application).getRTKConfigDao(); rtkConfig = rtkConfigDao.getRTKConfig(); WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { MyLog.d(TAG,"获取RTK配置信息表"); rtkConfig1 = rtkConfigDao.getRTKConfigNoLive(); } }); } public void insertRTKConfig(final RTKConfig rtkConfig){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { rtkConfigDao.insert(rtkConfig); } }); } public LiveData<RTKConfig> getRTKConfig(){ return rtkConfig; } public void update(final RTKConfig rtkConfig){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { rtkConfigDao.update(rtkConfig); } }); } public RTKConfig getRTKConfigNoLive() { if (rtkConfig1 == null){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { MyLog.d(TAG,"再次获取RTK配置信息表"); rtkConfig1 = rtkConfigDao.getRTKConfigNoLive(); } }); } return rtkConfig1; } } app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -17,8 +17,13 @@ import androidx.lifecycle.ViewModelProviders; import me.yokeyword.fragmentation.SupportActivity; import safeluck.drive.evaluation.DB.Student; import safeluck.drive.evaluation.DB.WokViewModel; import safeluck.drive.evaluation.fragment.HomeFragment; import com.anyun.exam.lib.MyLog; import java.util.List; import safeluck.drive.evaluation.util.PermissionManager; import safeluck.drive.evaluation.viewmodels.MainViewModel; @@ -37,6 +42,20 @@ setContentView(R.layout.activity_main); WokViewModel wokViewModel = ViewModelProviders.of(this).get(WokViewModel.class); wokViewModel.getStudents().observe(this, new Observer<List<Student>>() { @Override public void onChanged(List<Student> students) { for (Student student: students) { Log.i(TAG, "onChanged: "+student.toString()); } } }); mPermissionsManager = new PermissionManager(this) { @Override public void authorized(int requestCode) { app/src/main/java/safeluck/drive/evaluation/app.java
@@ -1,7 +1,6 @@ package safeluck.drive.evaluation; import android.app.Application; import android.util.Log; import android.widget.Toast; @@ -12,6 +11,7 @@ import me.yokeyword.fragmentation.Fragmentation; import me.yokeyword.fragmentation.helper.ExceptionHandler; import com.anyun.exam.lib.MyLog; import com.anyun.exam.lib.crash.CrashHandler; import com.facebook.stetho.Stetho; @@ -21,11 +21,12 @@ import org.json.JSONException; import org.json.JSONObject; import java.util.Random; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProjRepository; import safeluck.drive.evaluation.bean.RTKConfig; import safeluck.drive.evaluation.cEventCenter.CEventCenter; import safeluck.drive.evaluation.util.FileUtil; import safeluck.drive.evaluation.DB.rtktb.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKWorkRepository; import safeluck.drive.evaluation.util.SystemUtil; /** @@ -39,11 +40,15 @@ private static final String TAG = "app"; private Gson gson; RTKConfig rtkConfig; FailedProjRepository failedProjRepository;//失败项目表数据库 RTKWorkRepository rtkWorkRepository;//保存RTK配置表 Random random = new Random(); @Override public void onCreate() { super.onCreate(); //初始化Fragment 建议在Application onCreate里面初始化 if (SystemUtil.compareProcessName(this)){ if (SystemUtil.compareProcessName(this)) { Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(false) .handleException(new ExceptionHandler() { @Override @@ -53,25 +58,29 @@ }) .install(); CrashHandler crashHandler =CrashHandler.getInstance(); CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext()); AYSdk.getInstance().init(getApplicationContext()); AYSdk.getInstance().registListener(this); Log.i(TAG, "onCreate: "); MyLog.createIfNotExist(); Stetho.initializeWithDefaults(this); //RTK配置信息 rtkConfig = new RTKConfig(); rtkConfig.setCity(12); rtkConfig.setImei("460123874561"); rtkConfig.setInterval(1); rtkConfig.setIp("47.93.80.84"); rtkConfig.setModel("123"); rtkConfig.setPhone("2019101500000001"); rtkConfig.setPort(12125); rtkConfig.setProvince(23); rtkConfig.setSn("2019101500000001"); // rtkConfig = new RTKConfig(); // rtkConfig.setCity(12); // rtkConfig.setImei("460123874561"); // rtkConfig.setInterval(1); // rtkConfig.setIp("47.93.80.84"); // rtkConfig.setModel("123"); // rtkConfig.setPhone("2019101500000001"); // rtkConfig.setPort(12125); // rtkConfig.setProvince(23); // rtkConfig.setSn("2019101500000001"); //数据库操作 MyLog.i(TAG, "onCreate111"); failedProjRepository = new FailedProjRepository(this); rtkWorkRepository = new RTKWorkRepository(this); } } @@ -90,40 +99,99 @@ } @Override public void callBackMsg(int cmd, String json) { MyLog.d(TAG, String.format("收到命令[%d],Json内容为%s",cmd,json)); switch (cmd){ public void callBackMsg(final int cmd, String json) { MyLog.d(TAG, String.format("收到命令[%d],Json内容为%s", cmd, json)); switch (cmd) { case Constant.NDK_START: Toast.makeText(this, "NDK start", Toast.LENGTH_SHORT).show(); break; case Constant.RTK_PLATFORM_REGISTER_STATUS: failedProjRepository.insert(new FailedProj(Constant.SUBJECT_I, cmd + random.nextInt(26), Constant.TEST_STU_ID)); rtkConfig = rtkWorkRepository.getRTKConfigNoLive(); try { JSONObject jsonObject = new JSONObject(); int reg_code = jsonObject.getInt("register_code"); JSONObject jsonObject = new JSONObject(json); String rtkLoginPwd = jsonObject.getString("password"); int reg_code = jsonObject.getInt("register_code"); rtkConfig.setPassword(rtkLoginPwd); rtkConfig.setRegistered(reg_code); } catch (JSONException e) { e.printStackTrace(); } rtkWorkRepository.insertRTKConfig(rtkConfig); break; case Constant.RTK_PLATFORM_REGISTER_RESULT: failedProjRepository.insert(new FailedProj(Constant.SUBJECT_I, cmd + random.nextInt(26), Constant.TEST_STU_ID)); try { JSONObject jsonObject = new JSONObject(json); int rtklogincode = jsonObject.getInt("login_code"); rtkConfig.setRegistered(rtklogincode); } catch (JSONException e) { e.printStackTrace(); } break; case Constant.FETCH_RTK_PLATFORM_INFO: if (gson == null){ rtkConfig = rtkWorkRepository.getRTKConfigNoLive(); if (gson == null) { gson = new Gson(); } MyLog.i(TAG, "RTK配置信息:"+gson.toJson(rtkConfig)); AYSdk.getInstance().sendCmd(Constant.PUSH_RTK_PLATFORM_INFO,gson.toJson(rtkConfig)); if (rtkConfig==null){ rtkConfig = rtkWorkRepository.getRTKConfigNoLive(); } if (rtkConfig != null){ String rtkjson = gson.toJson(rtkConfig); MyLog.i(TAG, "RTK配置信息:" + rtkjson); //去除id字段 JSONObject jsonObject = null; try { jsonObject = new JSONObject(rtkjson); } catch (JSONException e) { e.printStackTrace(); } jsonObject.remove("_id"); rtkjson = null; rtkjson = jsonObject.toString(); MyLog.i(TAG, "RTK配置信息:" + rtkjson); AYSdk.getInstance().sendCmd(Constant.PUSH_RTK_PLATFORM_INFO, rtkjson); } break; case Constant.JUDGE_INFO: FailedProjRepository failedProjRepository = new FailedProjRepository(this); failedProjRepository.insert(new FailedProj(1,cmd,Constant.TEST_STU_ID)); failedProjRepository.insert(new FailedProj(Constant.SUBJECT_I, cmd, Constant.TEST_STU_ID)); break; case Constant.EXAM_STATUS_REPLY: MyLog.d(TAG, "考试开始,需要删除上一个考试学员的数据库失败项目表"); failedProjRepository.deleteAll(); break; case Constant.RTK_PLATFORM_CONNECT_STATUS: rtkConfig = rtkWorkRepository.getRTKConfigNoLive(); try { JSONObject jsonObject3 = new JSONObject(json); String ip = jsonObject3.getString("ip"); int port = jsonObject3.getInt("port"); int reg_code = jsonObject3.getInt("connected"); rtkConfig.setRegistered(reg_code); rtkConfig.setIp(ip); rtkConfig.setPort(port); } catch (JSONException e) { e.printStackTrace(); } rtkWorkRepository.insertRTKConfig(rtkConfig); break; } } } app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -13,6 +13,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.anyun.exam.lib.AYSdk; import com.google.gson.Gson; @@ -28,6 +30,8 @@ import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.failitems.FailedProjViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProj_select; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.adapter.ScoreAdapter; import safeluck.drive.evaluation.bean.ScoreBean; @@ -46,6 +50,8 @@ private Button btn_start_exam; private ScoreAdapter mScoreAdapter; private int item_id;//扣分分数总和 private List<ScoreBean> mArrayList = new ArrayList<>(); public static SupportFragment newInstance() { @@ -57,6 +63,24 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout_train_fragment,container,false); initView(view); FailedProjViewModel failedProjViewModel = ViewModelProviders.of(this).get(FailedProjViewModel.class); failedProjViewModel.getFailedProjectsForI(Constant.TEST_STU_ID).observe(this, new Observer<List<FailedProj_select>>() { @Override public void onChanged(List<FailedProj_select> failedProj_selects) { item_id = 0; mArrayList.clear(); for (FailedProj_select f : failedProj_selects) { item_id += f.getScore_deducting(); Log.i(TAG, "onChanged: "+f.toString()); mArrayList.add(new ScoreBean(f.getScore_deducting(),f.getItem_content(),f.getDeducting_reason())); mScoreAdapter.addDatas(mArrayList); } } }); return view; } @@ -68,13 +92,6 @@ btn_start_exam.setOnClickListener(this); view.findViewById(R.id.tv_stop).setOnClickListener(this); mListView.addHeaderView(LayoutInflater.from(_mActivity).inflate(R.layout.layout_score_item,null)); mArrayList.add(new ScoreBean(12,"直角转弯","后轮胎压线")); mArrayList.add(new ScoreBean(100,"倒车入库","未系安全带")); mArrayList.add(new ScoreBean(10,"坡道起步","一次熄火")); mArrayList.add(new ScoreBean(0,"","")); mArrayList.add(new ScoreBean(0,"","")); mScoreAdapter.addDatas(mArrayList); } app/src/main/java/safeluck/drive/evaluation/fragment/RTKConfigFragment.java
@@ -3,6 +3,10 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,8 +15,9 @@ import com.google.gson.Gson; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.bean.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKConfig; /**FTP配置UI * MyApplication2 @@ -25,6 +30,8 @@ private static final String TAG = "RTKConfigFragment"; private EditText et_ip,et_port,et_city_id,et_city_province,et_phone; private RTKConfigViewModel rtkConfigViewModel; private RTKConfig mRtkConfig; public static SupportFragment newInstance(){ return new RTKConfigFragment(); @@ -37,19 +44,43 @@ View view = inflater.inflate(R.layout.layout_rtk_setting,container,false); initView(view); rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class); rtkConfigViewModel.getRTKConfig().observe(this, new Observer<RTKConfig>() { @Override public void onChanged(RTKConfig rtkConfig) { Log.i(TAG, "RTKConfig Changed: "+rtkConfig.toString()); mRtkConfig = rtkConfig; et_ip.setText(rtkConfig.getIp()); et_city_id.setText(String.valueOf(rtkConfig.getCity())); et_city_province.setText(String.valueOf(rtkConfig.getProvince())); et_port.setText(String.valueOf(rtkConfig.getPort())); et_phone.setText(rtkConfig.getPhone()); } }); return view; } private void initView(View view) { view.findViewById(R.id.btn_save_rtk).setOnClickListener(this); et_ip = view.findViewById(R.id.rtk_addr_ip); et_city_id = view.findViewById(R.id.et_city_id); et_city_province = view.findViewById(R.id.et_provice_id); et_phone = view.findViewById(R.id.et_phone); et_port = view.findViewById(R.id.rtk_addr_port); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_save_rtk: Gson gson = new Gson(); String rtkConfigjson = gson.toJson(RTKConfig.class); if (mRtkConfig != null){ mRtkConfig.setPort(Integer.parseInt(et_port.getText().toString().trim())); mRtkConfig.setCity(Integer.parseInt(et_city_id.getText().toString().trim())); mRtkConfig.setProvince(Integer.parseInt(et_city_province.getText().toString().trim())); mRtkConfig.setIp(et_ip.getText().toString().trim()); mRtkConfig.setPhone(et_phone.getText().toString().trim()); rtkConfigViewModel.insertRTKConfig(mRtkConfig); } break; } } app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -45,7 +45,7 @@ private Button btn_train; private ScoreAdapter mScoreAdapter; private int item_id; private int item_id;//扣分分数总和 private List<ScoreBean> mArrayList = new ArrayList<>(); @@ -78,16 +78,6 @@ View view = inflater.inflate(R.layout.layout_train_fragment,container,false); initView(view); WokViewModel wokViewModel = ViewModelProviders.of(this).get(WokViewModel.class); wokViewModel.getStudents().observe(this, new Observer<List<Student>>() { @Override public void onChanged(List<Student> students) { for (Student student: students) { Log.i(TAG, "onChanged: "+student.toString()); } } }); FailedProjViewModel failedProjViewModel =ViewModelProviders.of(this).get(FailedProjViewModel.class); @@ -95,11 +85,13 @@ @Override public void onChanged(List<FailedProj_select> failedProj_selects) { item_id = 0; mArrayList.clear(); for (FailedProj_select f : failedProj_selects) { item_id += f.getScore_deducting(); Log.i(TAG, "onChanged: "+f.toString()); Toast.makeText(getActivity().getApplicationContext(),"得分"+item_id,Toast.LENGTH_SHORT).show(); mArrayList.add(new ScoreBean(f.getScore_deducting(),f.getItem_content(),f.getDeducting_reason())); mScoreAdapter.addDatas(mArrayList); } } }); @@ -109,6 +101,7 @@ private void initView(View view) { mListView = view.findViewById(R.id.lv); mListView.setFocusable(false);//listview不获取焦点,不然的话scrollview会顶到底部 view.findViewById(R.id.view_map).setOnClickListener(this); btn_train = view.findViewById(R.id.btn_start); btn_train.setOnClickListener(this); @@ -117,10 +110,7 @@ mListView.setAdapter(mScoreAdapter); mListView.addHeaderView(LayoutInflater.from(_mActivity).inflate(R.layout.layout_score_item,null)); mArrayList.add(new ScoreBean(12,"直角转弯","后轮胎压线")); mArrayList.add(new ScoreBean(100,"倒车入库","未系安全带")); mArrayList.add(new ScoreBean(10,"坡道起步","一次熄火")); mScoreAdapter.addDatas(mArrayList); }