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>