SharedPrefernce增加保存hashmap ;设置界面增加车辆模型、地图信息展示(名字、版本)和版本更新功能,点击之后进行http请求,请求完成后发送地图、车辆给移动站服务;设置界面信息展示增加TypeCount,展示地图简要信息
11个文件已修改
2个文件已添加
555 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigUpdateWorker.kt 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/BaseDataInfoAdapter.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/BaseDataUIBean.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/CarInfoHead.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpRoadMapRsp.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpYardRsp.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/map_car_info_update.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigUpdateWorker.kt
@@ -19,7 +19,9 @@
import safeluck.drive.evaluation.DB.Constant
import safeluck.drive.evaluation.DB.WorkRoomDataBase
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.BaseDataUIBean
import safeluck.drive.evaluation.bean.ExamPlatformData
import safeluck.drive.evaluation.bean.MapInfoHead
import safeluck.drive.evaluation.httpmodule.HttpCarRespBean
import safeluck.drive.evaluation.httpmodule.HttpRequetBean
import safeluck.drive.evaluation.httpmodule.HttpRoadMapRsp
@@ -96,12 +98,18 @@
                    jsonObject1 = JSONObject(str)
                    val result = jsonObject1!!.getBoolean("result")
                    if (result) {
                        var mapInfoHead:MapInfoHead = MapInfoHead("","",BaseDataUIBean.TYPE_.car)
                        when(type){
                            "road" ->{
                                mapInfoHead.type = BaseDataUIBean.TYPE_.road
                                val map = gson.fromJson<HttpRoadMapRsp>(str, HttpRoadMapRsp::class.java)
                            if (map.isResult) {
                                if (map.data != null) {
                                    mapInfoHead.version = map.data.version
                                    if (map.data.map_json.type.equals("road")) {
                                        mapInfoHead.str = map.data.map_json.name
                                        ExamPlatformData.getInstance().setNewRoadMapPath(Environment.getExternalStorageDirectory().absolutePath + "/"
                                                + applicationContext.getPackageName() + "/" + fileName)
                                        CThreadPoolExecutor.runInBackground(Runnable {
@@ -118,10 +126,13 @@
                            }}
                                "yard" ->{
                                    mapInfoHead.type = BaseDataUIBean.TYPE_.yard
                                    val yard = gson.fromJson<HttpYardRsp>(str,HttpYardRsp::class.java)
                                    if (yard.isResult){
                                        if (yard.data !=null){
                                            mapInfoHead.version = yard.data.version
                                            Log.i(TAG,"yard====")
                                            mapInfoHead.str = yard.data.map_json.name
                                            ExamPlatformData.getInstance().setNewMapPath(Environment.getExternalStorageDirectory().absolutePath + "/"
                                                    + applicationContext.getPackageName() + "/"+fileName)
                                            CThreadPoolExecutor.runInBackground(Runnable{
@@ -134,10 +145,13 @@
                                    }
                                }
                            else ->{
                                mapInfoHead.type = BaseDataUIBean.TYPE_.car
                                val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java)
                                if (car.isResult){
                                    if (car.data !=null){
                                        mapInfoHead.version = car.data.version
                                        mapInfoHead.str = car.data.map_json.name
                                        ExamPlatformData.getInstance().carModelPath = Environment.getExternalStorageDirectory().absolutePath + "/" +
                                                applicationContext.getPackageName() + "/"+fileName
@@ -153,7 +167,7 @@
                                }
                            }
                        }
                        ExamPlatformData.getInstance().setMapHeadInfo(mapInfoHead)
                    } else {
//                        Toast.makeText(applicationContext, jsonObject1!!.getString("data"), Toast.LENGTH_SHORT).show()
                    }
app/src/main/java/safeluck/drive/evaluation/adapter/BaseDataInfoAdapter.java
@@ -1,10 +1,12 @@
package safeluck.drive.evaluation.adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
@@ -12,6 +14,7 @@
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.bean.BaseDataUIBean;
import safeluck.drive.evaluation.fragment.BaseDatasFragment;
/**
 * MyApplication2
@@ -20,10 +23,11 @@
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class BaseDataInfoAdapter extends BaseAdapter {
    private List<BaseDataUIBean> persons = new ArrayList<>();//gps信息
public class BaseDataInfoAdapter extends BaseAdapter implements View.OnClickListener {
    private List<BaseDataUIBean> persons = new ArrayList<>();
    private final static String TAG = "anyun_info";
    private Context mContext;
    private Callback mCallback;
    @Override
    public int getCount() {
        return persons.size();
@@ -35,26 +39,73 @@
    }
    @Override
    public int getViewTypeCount() {
        return 2;
    }
    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public int getItemViewType(int position) {
        if (persons.get(position).getType()==0){
            return 0;
        }else{
        return 1;
        }
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        InfoHodler infoHodler = null;
        if (view == null){
            view = LayoutInflater.from(mContext).inflate(R.layout.gps_info_item,null);
            infoHodler = new InfoHodler();
            infoHodler.name = view.findViewById(R.id.text_check_info);
            view.setTag(infoHodler);
        }else{
            infoHodler = (InfoHodler) view.getTag();
        MapCarInfoHodler mapCarinfoHodler = null;
        switch (getItemViewType(i)){
            case 0:
                if (view == null){
                    view = LayoutInflater.from(mContext).inflate(R.layout.gps_info_item,null);
                    infoHodler = new InfoHodler();
                    infoHodler.name = view.findViewById(R.id.text_check_info);
                    view.setTag(infoHodler);
                }else{
                    infoHodler = (InfoHodler) view.getTag();
                }
                infoHodler.name.setText(getItem(i).getDes());
                infoHodler.name.setCompoundDrawablesWithIntrinsicBounds(mContext.getResources().
                        getDrawable(getItem(i).getRes_id()),null,null,null);
                infoHodler.name.setCompoundDrawablePadding(10);
                break;
            default:
                Log.i(TAG,"Defalut");
                if (view == null){
                    view = LayoutInflater.from(mContext).inflate(R.layout.map_car_info_update,null);
                    mapCarinfoHodler = new MapCarInfoHodler();
                    mapCarinfoHodler.name = view.findViewById(R.id.tv_map_name);
                    mapCarinfoHodler.version = view.findViewById(R.id.tv_version);
                    mapCarinfoHodler.btn = view.findViewById(R.id.btn_update_map_car);
                    view.setTag(mapCarinfoHodler);
                }else{
                    mapCarinfoHodler = (MapCarInfoHodler) view.getTag();
                }
                mapCarinfoHodler.btn.setOnClickListener(this);
                mapCarinfoHodler.btn.setTag(i);
                mapCarinfoHodler.name.setText(getItem(i).getDes());
                mapCarinfoHodler.name.setCompoundDrawablesWithIntrinsicBounds(mContext.getResources().
                        getDrawable(getItem(i).getRes_id()),null,null,null);
                mapCarinfoHodler.name.setCompoundDrawablePadding(10);
                mapCarinfoHodler.btn.setText(getItem(i).getBtn_txt());
                mapCarinfoHodler.version.setText(getItem(i).getVersion());
                break;
        }
        infoHodler.name.setText(getItem(i).getDes());
        infoHodler.name.setCompoundDrawablesWithIntrinsicBounds(mContext.getResources().
                getDrawable(getItem(i).getRes_id()),null,null,null);
        infoHodler.name.setCompoundDrawablePadding(10);
        return view;
    }
@@ -71,6 +122,24 @@
        notifyDataSetChanged();//刷新界面
    }
    @Override
    public void onClick(View v) {
        if (mCallback != null){
            mCallback.click(v);
        }
    }
    public void setCallback(Callback call) {
        this.mCallback = call;
    }
    /**
     * 自定义接口,用于回调按钮点击事件到Fragment、Activity
     */
    public interface Callback{
        void click(View view);
    }
    static class InfoHodler {
@@ -81,5 +150,16 @@
    }
    static class MapCarInfoHodler {
        public TextView name;//姓名
        public TextView version;//姓名
    public Button btn;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/BaseDataUIBean.java
@@ -19,12 +19,59 @@
public class BaseDataUIBean {
    private SpannableString des;
    // 主要是只用了一个textview 表示item ,而地图和车辆模型需要一个按钮,所以跟单片机单独显示信息不一样;
    private int type=0;
    //标记车模型、场地、路考地图的版本  整型
    private SpannableString version;
    private String btn_txt="";
    public enum TYPE_{
        yard,road,car
    }
    TYPE_ type_;
    public String getBtn_txt() {
        return btn_txt;
    }
    public void setBtn_txt(String btn_txt) {
        this.btn_txt = btn_txt;
    }
    @IdRes
    private int res_id;
    public SpannableString getVersion() {
        return version;
    }
    public void setVersion(SpannableString version) {
        this.version = version;
    }
    public BaseDataUIBean(SpannableString s, int res_id) {
        this.des = s;
        this.res_id = res_id;
    }
    public BaseDataUIBean(SpannableString s, int res_id,SpannableString ver,String btn_txt,int type,TYPE_ t) {
        this.des = s;
        this.res_id = res_id;
        this.version = ver;
        this.type = type;
        this.btn_txt = btn_txt;
        this.type_ = t;
    }
    public TYPE_ getType_() {
        return type_;
    }
    public void setType_(TYPE_ type_) {
        this.type_ = type_;
    }
    public SpannableString getDes() {
@@ -42,4 +89,12 @@
    public void setRes_id(int res_id) {
        this.res_id = res_id;
    }
    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }
}
app/src/main/java/safeluck/drive/evaluation/bean/CarInfoHead.kt
New file
@@ -0,0 +1,8 @@
package safeluck.drive.evaluation.bean
/**DriveJudge
 * Created by lzw on 2020/8/24. 15:24:15
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
data class MapInfoHead(var version:String,var str:String,var type:BaseDataUIBean.TYPE_)
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -465,4 +465,16 @@
        sign_mode = (int) SPUtils.get(app.getAppContext(),SPUtils.SIGN_MODE,0);
        return sign_mode;
    }
    private HashMap<BaseDataUIBean.TYPE_,MapInfoHead> mapInfoHeads = new HashMap<>();
    public HashMap<BaseDataUIBean.TYPE_, MapInfoHead> getMapInfoHeads() {
        mapInfoHeads = SPUtils.getHashMap(app.getAppContext());
        return mapInfoHeads;
    }
    public void setMapHeadInfo(MapInfoHead mapHeadInfo) {
            mapInfoHeads.put(mapHeadInfo.getType(),mapHeadInfo);
        SPUtils.saveHashMap(mapInfoHeads,app.getAppContext());
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java
@@ -40,7 +40,10 @@
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.BuildConfig;
@@ -58,9 +61,11 @@
import safeluck.drive.evaluation.bean.BaseDataUIBean;
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.bean.MCUInfo;
import safeluck.drive.evaluation.bean.MapInfoHead;
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
import safeluck.drive.evaluation.cEventCenter.ICEventListener;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.DataInitKt;
import safeluck.drive.evaluation.util.FileUtil;
/**
@@ -71,7 +76,7 @@
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class BaseDatasFragment extends SupportFragment {
public class BaseDatasFragment extends SupportFragment implements BaseDataInfoAdapter.Callback {
    private static final String TAG = BaseDatasFragment.class.getSimpleName();
    private Gson gson = new Gson();
@@ -129,6 +134,16 @@
                                        setitemInfo("RTK平台状态         ", appStatus.getRtk_connect_status()==1?(appStatus.getRtk_login_code()==0?"已登录":"未登录"):"未连接",R.mipmap.conn_status);
                                        setitemInfo("考试平台状态         ", ExamPlatformData.getInstance().getExamplatformStatusStr(ExamPlatformData.getInstance().getExamplatformStatus()),R.mipmap.conn_status);
                                    }
                                    HashMap<BaseDataUIBean.TYPE_, MapInfoHead> hashMaps = ExamPlatformData.getInstance().getMapInfoHeads();
                                    Iterator<Map .Entry<BaseDataUIBean.TYPE_,MapInfoHead>> iterator = hashMaps.entrySet().iterator();
                                    while (iterator.hasNext()){
                                        Map.Entry<BaseDataUIBean.TYPE_,MapInfoHead>entry = iterator.next();
                                        Log.i(TAG,"key= " + entry.getKey() + " and value= " + entry.getValue());
                                        datas.add(new BaseDataUIBean(str2SpannableString(entry.getValue().getStr()),R.mipmap.province_id,str2FouregourdSpannableString(getResources().getString(R.string.mapversion)+entry.getValue().getVersion()),
                                                        entry.getKey()== BaseDataUIBean.TYPE_.car?"更新车辆模型":(entry.getKey()== BaseDataUIBean.TYPE_.road?"更新道路地图":"更新场地地图")
                                                ,1, entry.getKey()));
                                    }
                                    gpsInfoAdapter.addAll(datas);
                                }
                            });
@@ -137,6 +152,13 @@
            }
        }
    };
    private SpannableString str2FouregourdSpannableString(String s) {
        spannableString = new SpannableString(s);
        spannableString.setSpan(new AbsoluteSizeSpan(28),0,s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FFFFFF")),0,s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spannableString;
    }
    private void setitemInfo(String des, String str, int id){
        versionDes=des;
@@ -207,7 +229,19 @@
        gpsInfoAdapter = new BaseDataInfoAdapter(_mActivity);
        lv.setAdapter(gpsInfoAdapter);
        gpsInfoAdapter.setCallback(this);
    }
    private SpannableString str2SpannableString(String str) {
        spannableString = new SpannableString(str);
        spannableString.setSpan(new AbsoluteSizeSpan(22),0,str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#A8AAA7")),0,str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spannableString;
    }
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
@@ -226,4 +260,26 @@
        ((MainActivity)_mActivity).viewtitle.setVisibility(View.GONE);
        ((MainActivity)_mActivity).btn_return.setVisibility(View.GONE);
    }
    @Override
    public void click(View view) {
        if (view != null){
            Log.i(TAG,"view="+(int)view.getTag());
            BaseDataUIBean.TYPE_ type = datas.get((int)view.getTag()).getType_();
            switch (type){
                case car:
                    Toast.makeText(_mActivity, "更新车模型", Toast.LENGTH_SHORT).show();
                    DataInitKt.getMap(ExamPlatformData.getInstance().getPhone(),"car");
                    break;
                case road:
                    Toast.makeText(_mActivity, "更新道路地图", Toast.LENGTH_SHORT).show();
                    DataInitKt.getMap(ExamPlatformData.getInstance().getPhone(),"road");
                    break;
                case yard:
                    Toast.makeText(_mActivity, "更新场地地图", Toast.LENGTH_SHORT).show();
                    DataInitKt.getMap(ExamPlatformData.getInstance().getPhone(),"yard");
                    break;
            }
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java
@@ -38,6 +38,8 @@
        private String server;
        private String port;
        private String version;
        private String map_url;
        private MapJsonBean map_json;
        private String pzh;
@@ -45,6 +47,22 @@
            return server;
        }
        public String getVersion() {
            return version;
        }
        public void setVersion(String version) {
            this.version = version;
        }
        public String getMap_url() {
            return map_url;
        }
        public void setMap_url(String map_url) {
            this.map_url = map_url;
        }
        public void setServer(String server) {
            this.server = server;
        }
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpRoadMapRsp.java
@@ -38,9 +38,27 @@
        private String server;
        private String port;
        private String version;
        private String map_url;
        private MapJsonBean map_json;
        private String pzh;
        public String getVersion() {
            return version;
        }
        public void setVersion(String version) {
            this.version = version;
        }
        public String getMap_url() {
            return map_url;
        }
        public void setMap_url(String map_url) {
            this.map_url = map_url;
        }
        public String getServer() {
            return server;
        }
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpYardRsp.java
@@ -40,9 +40,27 @@
        private String server;
        private String port;
        private String version;
        private String map_url;
        private MapJsonBean map_json;
        private String pzh;
        public String getVersion() {
            return version;
        }
        public void setVersion(String version) {
            this.version = version;
        }
        public String getMap_url() {
            return map_url;
        }
        public void setMap_url(String map_url) {
            this.map_url = map_url;
        }
        public String getServer() {
            return server;
        }
app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt
@@ -1,6 +1,10 @@
package safeluck.drive.evaluation.util
import android.content.Context
import android.os.Environment
import android.text.TextUtils
import android.util.Log
import android.widget.Toast
import androidx.work.Data
import androidx.work.ListenableWorker
import com.anyun.exam.lib.AYSdk
@@ -8,15 +12,24 @@
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.google.gson.stream.JsonReader
import okhttp3.ResponseBody
import org.json.JSONException
import org.json.JSONObject
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import safeluck.drive.evaluation.Constant
import safeluck.drive.evaluation.DB.WorkRoomDataBase
import safeluck.drive.evaluation.DB.rtktb.RTKConfig
import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig
import safeluck.drive.evaluation.bean.ExamPlatformData
import safeluck.drive.evaluation.bean.SignalConfigRemote
import safeluck.drive.evaluation.bean.SimulateNightBean
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.*
import safeluck.drive.evaluation.httpmodule.HttpCarRespBean
import safeluck.drive.evaluation.httpmodule.HttpRequetBean
import safeluck.drive.evaluation.httpmodule.HttpRoadMapRsp
import safeluck.drive.evaluation.httpmodule.HttpYardRsp
import safeluck.drive.evaluation.httpmodule.RetrofitCreator.Companion.getRestService
import safeluck.drive.evaluation.platformMessage.PlatFormConstant
import safeluck.drive.evaluation.worker.MCUUpgradeWorker
import java.io.IOException
import java.io.InputStreamReader
@@ -205,3 +218,150 @@
    }
    return false
}
 fun getMap(sn: String, type: String){
    lateinit var jsonObject1 :JSONObject
    lateinit var fileName :String
    when(type){
        "road" -> fileName =  safeluck.drive.evaluation.Constant.ROAD_MAP
        "yard" -> fileName =  safeluck.drive.evaluation.Constant.MAP
        else -> fileName = safeluck.drive.evaluation.Constant.VEHICLE
    }
        getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, type)).enqueue(object : Callback<ResponseBody> {
            override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                MyLog.i(PlatFormConstant.HTTPTAG,t.localizedMessage)
            }
            override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                var str: String = response.body()!!.string()
                MyLog.i(PlatFormConstant.HTTPTAG,str)
                jsonObject1 = JSONObject(str)
                val result = jsonObject1!!.getBoolean("result")
                if (result) {
                    var mapInfoHead: MapInfoHead = MapInfoHead("","", BaseDataUIBean.TYPE_.car)
                    when(type){
                        "road" ->{
                            mapInfoHead.type = BaseDataUIBean.TYPE_.road
                            val map = gson.fromJson<HttpRoadMapRsp>(str, HttpRoadMapRsp::class.java)
                            if (map.isResult) {
                                if (map.data != null) {
                                    mapInfoHead.version = map.data.version
                                    if (map.data.map_json.type.equals("road")) {
                                        mapInfoHead.str = map.data.map_json.name
                                        ExamPlatformData.getInstance().setNewRoadMapPath(Environment.getExternalStorageDirectory().absolutePath + "/"
                                                + app.getAppContext().getPackageName() + "/" + fileName)
                                        CThreadPoolExecutor.runInBackground(Runnable {
                                            str = gson.toJson(map.data.map_json)
                                            MyLog.i(PlatFormConstant.HTTPTAG,"科三道路地图保存成功")
                                            FileUtil.writeTxtFileToSD(app.getAppContext(), fileName, str, "")
//                                            sendRoadMapInfo()
                                        })
                                    }
                                }
                            }}
                        "yard" ->{
                            mapInfoHead.type = BaseDataUIBean.TYPE_.yard
                            val yard = gson.fromJson<HttpYardRsp>(str,HttpYardRsp::class.java)
                            if (yard.isResult){
                                if (yard.data !=null){
                                    mapInfoHead.version = yard.data.version
                                    mapInfoHead.str = yard.data.map_json.name
                                    ExamPlatformData.getInstance().setNewMapPath(Environment.getExternalStorageDirectory().absolutePath + "/"
                                            + app.getAppContext().getPackageName() + "/"+fileName)
                                    CThreadPoolExecutor.runInBackground(Runnable{
                                        MyLog.i(PlatFormConstant.HTTPTAG,"科三场地地图保存成功")
                                        str = gson.toJson(yard.data.map_json)
                                        FileUtil.writeTxtFileToSD(app.getAppContext(),fileName,str,"")
                                        sendMapInfo()
                                    })
                                }
                            }
                        }
                        else ->{
                            mapInfoHead.type = BaseDataUIBean.TYPE_.car
                            val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java)
                            if (car.isResult){
                                if (car.data !=null){
                                    mapInfoHead.version = car.data.version
                                    mapInfoHead.str = car.data.map_json.name
                                    ExamPlatformData.getInstance().carModelPath = Environment.getExternalStorageDirectory().absolutePath + "/" +
                                            app.getAppContext().getPackageName() + "/"+fileName
//                                    Log.i(TAG, "解析之后的车模型=$str")
                                    CThreadPoolExecutor.runInBackground(Runnable{
                                        str = gson.toJson(car.data.map_json)
                                        MyLog.i(PlatFormConstant.HTTPTAG,"车辆模型保存成功")
                                        FileUtil.writeTxtFileToSD(app.getAppContext(),fileName,str,"")
                                        sendVehicleInfo()
                                    })
                                }
                            }
                        }
                    }
                    ExamPlatformData.getInstance().setMapHeadInfo(mapInfoHead)
                } else {
//                        Toast.makeText(applicationContext, jsonObject1!!.getString("data"), Toast.LENGTH_SHORT).show()
                }
            }
        })
}
private fun sendMapInfo(){
    val mapPath = ExamPlatformData.getInstance().mapPath
    if (!TextUtils.isEmpty(mapPath)) {
        MyLog.i("更新Map的地图$mapPath")
        val fileContent = FileUtil.readFile(mapPath)
        if (fileContent != null) {
            val str = String(fileContent)
            AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_MAP_INFO, str)
        } else {
            MyLog.i(String.format("文件:%s不存在", mapPath))
            CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), "文件:" + mapPath + "不存在", Toast.LENGTH_SHORT).show() }
        }
    }
}
private fun sendVehicleInfo(){
    val carPath = ExamPlatformData.getInstance().carModelPath
    if (!TextUtils.isEmpty(carPath)) {
        MyLog.i("更新后的Car模型$carPath")
        val bytes = FileUtil.readFile(carPath)
        if (bytes != null) {
            val str = String(bytes)
            AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_VECHILE_PROFILE, str)
        } else {
            MyLog.i(String.format("文件:%s不存在", carPath))
        }
    }
}
private fun sendRoadMapInfo(){
    val roadmapPath = ExamPlatformData.getInstance().roadMapPath
    if (!TextUtils.isEmpty(roadmapPath)) {
        MyLog.i("更新RoadMap地图$roadmapPath")
        val fileContent = FileUtil.readFile(roadmapPath)
        if (fileContent != null) {
            val str = String(fileContent)
            AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_ROAD_MAP_INFO, str)
        } else {
            MyLog.i(String.format("文件:%s不存在", roadmapPath))
            CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), "文件:" + roadmapPath + "不存在", Toast.LENGTH_SHORT).show() }
        }
    } else {
    }
}
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java
@@ -4,10 +4,18 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import safeluck.drive.evaluation.bean.BaseDataUIBean;
import safeluck.drive.evaluation.bean.MapInfoHead;
public class SPUtils
{
@@ -27,6 +35,37 @@
    public static final String Coach_SIGN_STATUS = "coach_sign_";
    public static final String SIGN_MODE = "sign_mode";
    public static final String EXAM_ID = "exam_id";
    //将 HashMap 用sp存储起来
    public static void saveHashMap(HashMap<BaseDataUIBean.TYPE_,MapInfoHead> map, Context context){
        Gson gson = new Gson();
        String json = gson.toJson(map);
        //步骤1:创建一个SharedPreferences对象
        SharedPreferences sharedPreferences= context.getSharedPreferences("config", Context.MODE_PRIVATE);
        //步骤2: 实例化SharedPreferences.Editor对象
        SharedPreferences.Editor editor = sharedPreferences.edit();
        //步骤3:将获取过来的值放入文件
        editor.putString("config",json);
        editor.commit();
    }
    //将json格式的字符串从sp中取出来转化为hashMap
    public static  HashMap<BaseDataUIBean.TYPE_, MapInfoHead> getHashMap(Context context){
        SharedPreferences sharedPreferences=context. getSharedPreferences("config", Context .MODE_PRIVATE);
        String json =sharedPreferences.getString("config","");
        HashMap<BaseDataUIBean.TYPE_,MapInfoHead> map = null;
        Type type = new TypeToken<HashMap<BaseDataUIBean.TYPE_, MapInfoHead>>(){}.getType();
        Gson gson = new Gson();
        map = gson.fromJson(json, type);
        return map;
    }
    /**
     * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
app/src/main/res/layout/map_car_info_update.xml
New file
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal">
    <TextView
        android:id="@+id/tv_map_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="涪陵交通驾校"
        android:layout_weight="3"
        android:drawablePadding="@dimen/ui_margin_5dp"
        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
        android:drawableLeft="@mipmap/auto_check_status"
        android:textColor="@android:color/white"
/>
    <TextView
        android:id="@+id/tv_version"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/mapversion"
        android:layout_weight="1"
        android:textColor="@android:color/white"
 />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="更新车辆模型"
        android:textColor="@android:color/white"
        android:background="@drawable/bg_rgb_dlg"
        android:layout_weight="2"
        android:id="@+id/btn_update_map_car"
     />
</LinearLayout>
app/src/main/res/values/strings.xml
@@ -52,6 +52,7 @@
    <string name="by_crossing">通过路口</string>
    <string name="lane_change">变更车道</string>
    <string name="simulate_light_tip_start">下面将进行模拟夜间行驶场景灯光使用的考试,请按语音指令在5秒内做出相应的灯光操作</string>
    <string name="mapversion">版本:V</string>
    <array name="simulate_light_tips">
        <item>下面将进行模拟夜间行驶场景灯光使用的考试,请按语音指令在5秒内做出相应的灯光操作</item>
        <item>模拟夜间考试完成请关闭所有灯光,请起步继续完成考试</item>