lizhanwei
2020-04-02 82e853c976f0d268df2b493b2db89671748f35a6
实现从"https://trainsim-api.aaej.cn/"获取map和car模型的http接口
5个文件已修改
5个文件已添加
246 ■■■■ 已修改文件
app/build.gradle 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/AYApiService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/GsonConverterFactory.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpRequetBean.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/MyGsonRequestBodyConverter.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/RetrofitCreator.kt 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
build.gradle 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -12,6 +12,10 @@
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    buildTypes {
        release {
            minifyEnabled false
@@ -64,6 +68,7 @@
    implementation "androidx.core:core-ktx:+"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofit_version"
}
repositories {
    mavenCentral()
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -3,6 +3,7 @@
import android.app.Application;
import android.content.Context;
import android.os.Environment;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
@@ -34,9 +35,15 @@
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Random;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import safeluck.drive.evaluation.DB.WorkRoomDataBase;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatusWorker;
import safeluck.drive.evaluation.DB.criterias.CriteriaForI;
@@ -56,6 +63,8 @@
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.cEventCenter.CEvent;
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
import safeluck.drive.evaluation.httpmodule.HttpRequetBean;
import safeluck.drive.evaluation.httpmodule.RetrofitCreator;
import safeluck.drive.evaluation.im.IMSClientBootstrap;
import safeluck.drive.evaluation.im.IMSConnectStatusListener;
import safeluck.drive.evaluation.im.MessageProcessor;
@@ -84,7 +93,6 @@
    private static final String TAG = "app";
    private Gson gson;
    RTKConfig rtkConfig;
    FailedProjRepository failedProjRepository;//失败项目表数据库
    Random random = new Random();
    private static Context appContext=null;
    @Override
@@ -114,16 +122,8 @@
            //数据库操作
            MyLog.i(TAG, "onCreate111");
            FileUtil.createdirs(getApplicationContext());
            failedProjRepository = new FailedProjRepository(this);
            MyLog.i(TAG,"拷贝assert目录下的map" +
                    "和vechile json到包目录下");
            new Thread(new Runnable() {
                @Override
                public void run() {
                    FileUtil.copyAssertFileToSD(getApplicationContext(),Constant.MAP);
                    FileUtil.copyAssertFileToSD(getApplicationContext(),Constant.VEHICLE);
                }
            }).start();
           //1.先检查sd卡包名的目录下,是否存在地图文件和车辆模型文件
            //2. 如果不能再就去下载
app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -5,6 +5,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -12,6 +13,7 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatEditText;
import androidx.lifecycle.Observer;
@@ -22,6 +24,7 @@
import com.google.android.material.textfield.TextInputEditText;
import com.safeluck.aykj.utils.BytesUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.concurrent.Executors;
@@ -29,10 +32,18 @@
import java.util.concurrent.TimeUnit;
import me.yokeyword.fragmentation.SupportFragment;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import safeluck.drive.evaluation.DB.criterias.CriteriaForI;
import safeluck.drive.evaluation.DB.criterias.viewmodel.CriteriaIViewModel;
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.httpmodule.AYApiService;
import safeluck.drive.evaluation.httpmodule.HttpRequetBean;
import safeluck.drive.evaluation.httpmodule.RetrofitCreator;
import safeluck.drive.evaluation.im.MessageProcessor;
import safeluck.drive.evaluation.platformMessage.AttachInfo;
import safeluck.drive.evaluation.platformMessage.JKMessage0001;
@@ -45,6 +56,7 @@
import safeluck.drive.evaluation.platformMessage.JKMessage0204;
import safeluck.drive.evaluation.im.IMSClientBootstrap;
import safeluck.drive.evaluation.platformMessage.JKMessage0206;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.SPUtils;
import static safeluck.drive.evaluation.util.Utils.utc2NetWorkTime;
@@ -132,31 +144,53 @@
                /**======================测试数据库结束==================*/
                Speaker speaker = new Speaker(getActivity(),null);
                speaker.speak("中国加油,重庆加油");
//                Speaker speaker = new Speaker(getActivity(),null);
//                speaker.speak("中国加油,重庆加油");
//
//                String userId = "100002";
//                String token = "token_" + userId;
////                String hosts = "[{\"host\":\"47.93.80.84\", \"port\":12125}]";
//                String hosts = "[{\"host\":\"47.93.157.103\", \"port\":2020}]";
////                String hosts = "[{\"host\":\"192.168.31.77\", \"port\":12125}]";
//
//                IMSClientBootstrap.getInstance().init(userId, token, hosts, 1, new IMSConnectStatusCallback() {
//                    @Override
//                    public void onConnecting() {
//
//                    }
//
//                    @Override
//                    public void onConnected() {
//
//                    }
//
//                    @Override
//                    public void onConnectFailed() {
//
//                    }
//                });
                String userId = "100002";
                String token = "token_" + userId;
//                String hosts = "[{\"host\":\"47.93.80.84\", \"port\":12125}]";
                String hosts = "[{\"host\":\"47.93.157.103\", \"port\":2020}]";
//                String hosts = "[{\"host\":\"192.168.31.77\", \"port\":12125}]";
                        RetrofitCreator.Companion.getRestService().getMapsAndVehicleModel(new HttpRequetBean("0314200100000004","place")).enqueue(new Callback<ResponseBody>() {
                            @Override
                            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                                String str = null;
                                try {
                                    str = response.body().string();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                Log.i(TAG,"服务器返回的body="+str);
                                if (Looper.myLooper()==Looper.getMainLooper()){
                                    Toast.makeText(_mActivity, "主线程", Toast.LENGTH_SHORT).show();
                                }
                            }
                IMSClientBootstrap.getInstance().init(userId, token, hosts, 1, new IMSConnectStatusCallback() {
                    @Override
                    public void onConnecting() {
                            @Override
                            public void onFailure(Call<ResponseBody> call, Throwable t) {
                                Log.i(TAG,t.getLocalizedMessage());
                            }
                        });
                    }
                    @Override
                    public void onConnected() {
                    }
                    @Override
                    public void onConnectFailed() {
                    }
                });
                break;
            case R.id.btn_send:
//                if (connectThread != null){
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -304,7 +304,7 @@
                            if (examStatus.getResult() ==1){
                                MyLog.i(String.format("已经播放过%s合格",ss));
                            }else{
                                ExamPlatformData.getInstance().getTTS().speak(String.format("%s合格",ss));
//                                ExamPlatformData.getInstance().getTTS().speak(String.format("%s合格",ss));
                                examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id());
                            }
@@ -447,9 +447,11 @@
                    if (examStatus.get(0).getStartExam() != Constant.NONE_BEEN_START_EXAM){
                        btn_start_exam.setEnabled(false);
                        tv_stop.setEnabled(true);
                        iv_head.getDrawable().setLevel(1);
                    }else{
                        btn_start_exam.setEnabled(true);
                        tv_stop.setEnabled(false);
                        iv_head.getDrawable().setLevel(0);
                    }
                    exam_type = examStatus.get(0).getStartExam();
                }
@@ -606,7 +608,6 @@
                    public void changKao() {
                        exam_type = 2;
                        iv_head.getDrawable().setLevel(1);
                        ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.TRAINING_MODE);
                        ExamPlatformData.getInstance().setExamType(exam_type);
                        examStatusViewModel.updateStartExam(exam_type);
@@ -703,7 +704,7 @@
        failedProjViewModel.deleteAll();
        tv_total_score.setText(String.valueOf(currTotalScore));
        iv_head.getDrawable().setLevel(0);
        ExamPlatformData.getInstance().getTTS().speak("结束训练");
        examStatusViewModel.updateStartExam(Constant.NONE_BEEN_START_EXAM);
app/src/main/java/safeluck/drive/evaluation/httpmodule/AYApiService.java
New file
@@ -0,0 +1,22 @@
package safeluck.drive.evaluation.httpmodule;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.HEAD;
import retrofit2.http.Headers;
import retrofit2.http.POST;
public interface AYApiService {
//    地址:https://trainsim-api.aaej.cn/api/get/area
//    参数:
//    {
//        sn:"0314200100000002",
//                area_type:"place"
//    }
//    说明:POST请求,场地area_type传place,车模型area_type传car
    @POST("api/get/area")
    Call<ResponseBody> getMapsAndVehicleModel(@Body HttpRequetBean httpRequetBean);
}
app/src/main/java/safeluck/drive/evaluation/httpmodule/GsonConverterFactory.java
New file
@@ -0,0 +1,44 @@
package safeluck.drive.evaluation.httpmodule;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
import org.jetbrains.annotations.NotNull;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.annotation.Nullable;
import okhttp3.RequestBody;
import retrofit2.Converter;
import retrofit2.Retrofit;
public class GsonConverterFactory extends Converter.Factory {
    @NotNull
    public static Converter.Factory create() {
        return create(new Gson());
    }
    private static Converter.Factory create(Gson gson) {
        return new GsonConverterFactory(gson);
    }
    private final Gson gson;
    private GsonConverterFactory(Gson gson){
        if (gson == null){
            throw new NullPointerException("gson == null");
        }
        this.gson = gson;
    }
    @Nullable
    @Override
    public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        return new MyGsonRequestBodyConverter<>(gson,adapter);
    }
}
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpRequetBean.kt
New file
@@ -0,0 +1,3 @@
package safeluck.drive.evaluation.httpmodule
data class HttpRequetBean(var sn:String,var area_type:String)
app/src/main/java/safeluck/drive/evaluation/httpmodule/MyGsonRequestBodyConverter.java
New file
@@ -0,0 +1,45 @@
package safeluck.drive.evaluation.httpmodule;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import javax.annotation.Nullable;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okio.Buffer;
import retrofit2.Converter;
import static java.nio.charset.StandardCharsets.UTF_8;
public class MyGsonRequestBodyConverter<T> implements Converter<T, RequestBody> {
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
    private static final Charset UTF_8 = Charset.forName("UTF-8");
    private final Gson gson;
    private final TypeAdapter<T> adapter;
    public MyGsonRequestBodyConverter(Gson gson, TypeAdapter<T> adapter) {
        this.gson = gson;
        this.adapter = adapter;
    }
    @Nullable
    @Override
    public RequestBody convert(T value) throws IOException {
        Buffer buffer = new Buffer();
        Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8);
        JsonWriter jsonWriter = gson.newJsonWriter(writer);
        adapter.write(jsonWriter, value);
        jsonWriter.close();
        return RequestBody.create(MEDIA_TYPE, buffer.readByteString());
    }
}
app/src/main/java/safeluck/drive/evaluation/httpmodule/RetrofitCreator.kt
New file
@@ -0,0 +1,17 @@
package safeluck.drive.evaluation.httpmodule
import retrofit2.Retrofit
class RetrofitCreator{
    companion object{
        private val BASE_URL = "https://trainsim-api.aaej.cn/"
        private val RETROFIT_CLIENT = Retrofit.Builder().baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create()).build()
        private val REST_SERVICE = RETROFIT_CLIENT.create(AYApiService::class.java)
        public fun getRestService()=REST_SERVICE
    }
}
build.gradle
@@ -11,9 +11,10 @@
        roomVersion  ='2.2.1'
        workVersion  ='2.2.0'
        lifecycleVersion = '2.1.0'
        retrofit_version = '2.8.1'
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath 'com.android.tools.build:gradle:3.5.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong