yy1717
2020-01-09 6ecba06488059ca4bdc179f18648f161c0e7e43f
Merge branch 'master' of https://gitee.com/endian11/DriveJudge
12个文件已修改
4个文件已添加
1 文件已重命名
495 ■■■■ 已修改文件
app/src/main/assets/students_file.json 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/Constant.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailProjDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjRepository.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjWorker.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfig.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigDao.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigViewModel.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigWork.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKWorkRepository.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/RTKConfigFragment.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }