From f7237e21b9752946ac65aa79ad2f9c7ee0f23744 Mon Sep 17 00:00:00 2001
From: nilupeng <qingingrunt2010@qq.com>
Date: Tue, 09 Aug 2022 03:31:34 +0000
Subject: [PATCH] 分页框架优化

---
 app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java                          |    3 -
 app/src/main/java/com/runt/open/mvvm/retrofit/utils/RetrofitUtils.java                        |    2 
 app/src/main/java/com/runt/open/mvvm/util/HandleDate.java                                     |    9 ++++
 app/src/main/java/com/runt/open/mvvm/base/model/LoadPageViewModel.java                        |   34 +++++++++++++---
 app/src/main/java/com/runt/open/mvvm/ui/main/home/MsgAdapter.java                             |    5 --
 app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java                                |   13 +-----
 app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java                        |    8 +++-
 app/src/main/java/com/runt/open/mvvm/ui/main/home/Message.java                                |    2 
 app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java         |    3 +
 app/src/main/java/com/runt/open/mvvm/retrofit/converter/DecryptGsonResponseBodyConverter.java |    9 ++--
 10 files changed, 55 insertions(+), 33 deletions(-)

diff --git a/app/src/main/java/com/runt/open/mvvm/base/model/LoadPageViewModel.java b/app/src/main/java/com/runt/open/mvvm/base/model/LoadPageViewModel.java
index 5560ad5..a001534 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/model/LoadPageViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/model/LoadPageViewModel.java
@@ -2,10 +2,15 @@
 
 import androidx.lifecycle.MutableLiveData;
 
+import com.google.gson.Gson;
 import com.runt.open.mvvm.data.HttpApiResult;
 import com.runt.open.mvvm.data.PageResult;
 import com.runt.open.mvvm.retrofit.observable.HttpObserver;
 
+import org.json.JSONObject;
+
+import java.lang.reflect.ParameterizedType;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -13,20 +18,35 @@
  * 分页
  * Created by Administrator on 2021/11/3 0003.
  */
-public abstract class LoadPageViewModel<RESULT extends PageResult> extends BaseViewModel {
+public abstract class LoadPageViewModel<D> extends BaseViewModel {
 
     public final int SIZE = 10;
-    private MutableLiveData<List> liveData = new MutableLiveData<>();
+    private MutableLiveData<List<D>> liveData = new MutableLiveData<>();
     private MutableLiveData liveFailed = new MutableLiveData();
 
+    /**
+     * 请求地址
+     * @return
+     */
     protected abstract String requestUrl();
 
+    /**
+     * 数据请求
+     * @param page  页数
+     * @param param 请求参数
+     */
     public void requestData(int page,Map param){
-        httpObserverOn( commonApi.getPageData(requestUrl(), page, SIZE, param), new HttpObserver<RESULT>() {
-
+        final ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
+        Class<D> entityClass = (Class<D>) type.getActualTypeArguments()[0];
+        httpObserverOn( commonApi.getPageData(requestUrl(), page, SIZE, param), new HttpObserver<PageResult>() {
             @Override
-            protected void onSuccess(RESULT data) {
-                liveData.postValue(data.rows);
+            protected void onSuccess(PageResult data) {
+                //数据转换
+                List<D> list = new ArrayList<>();
+                for(Object map : data.rows){
+                    list.add(new Gson().fromJson(new JSONObject((Map) map).toString(),entityClass));
+                }
+                liveData.postValue(list);
             }
 
             @Override
@@ -37,7 +57,7 @@
         });
     }
 
-    public MutableLiveData<List> getLiveData(){
+    public MutableLiveData<List<D>> getLiveData(){
         return liveData;
     }
 
diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java b/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java
index b0d62f4..eb7c890 100644
--- a/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java
+++ b/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java
@@ -2,7 +2,9 @@
 
 import android.util.Log;
 
+import com.google.gson.Gson;
 import com.runt.open.mvvm.MyApplication;
+import com.runt.open.mvvm.data.PhoneDevice;
 import com.runt.open.mvvm.retrofit.net.NetWorkCost;
 import com.runt.open.mvvm.retrofit.net.NetWorkListenear;
 import com.runt.open.mvvm.retrofit.utils.HttpPrintUtils;
@@ -60,6 +62,7 @@
             Log.d(TAG, "hashcode:" + hashCode);
         }
         Request.Builder requestBuild = requestTemp.newBuilder()
+                .addHeader("device", new Gson().toJson(PhoneDevice.getDevice()))
                 .addHeader("appVersion", DeviceUtil.getAppVersionName(MyApplication.getApplication()))
                 .addHeader("os", DeviceUtil.isHarmonyOS()? "harmony" : "android");
         Request request = requestBuild.build().newBuilder().build();
diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java
index 5376e58..dbdc21b 100644
--- a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java
+++ b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java
@@ -2,6 +2,8 @@
 
 
 import com.runt.open.mvvm.data.ApkUpGradeResult;
+import com.runt.open.mvvm.data.HttpApiResult;
+import com.runt.open.mvvm.data.PageResult;
 
 import java.util.Map;
 
@@ -45,7 +47,7 @@
      * @return
      */
     @GET
-    Observable<Object> getPageData(@Url String url, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize, @QueryMap Map<String,String> param);
+    Observable<HttpApiResult<PageResult>> getPageData(@Url String url, @Query("page") int pageNum, @Query("size") int pageSize, @QueryMap Map<String,String> param);
 
     /**
      * 分页数据
@@ -57,7 +59,7 @@
      */
     @FormUrlEncoded
     @POST
-    Observable<Object> postPageData(@Url String url, @Field("pageNum") int pageNum, @Field("pageSize") int pageSize, @FieldMap Map<String,String> param);
+    Observable<Object> postPageData(@Url String url, @Field("page") int pageNum, @Field("size") int pageSize, @FieldMap Map<String,String> param);
 
     /**
      * app更新
@@ -72,4 +74,6 @@
     @Multipart
     @POST("updatehead")
     Call<ResponseBody> updateHead(@Part MultipartBody.Part file);
+
+
 }
diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/converter/DecryptGsonResponseBodyConverter.java b/app/src/main/java/com/runt/open/mvvm/retrofit/converter/DecryptGsonResponseBodyConverter.java
index befdc29..3e9ac2d 100644
--- a/app/src/main/java/com/runt/open/mvvm/retrofit/converter/DecryptGsonResponseBodyConverter.java
+++ b/app/src/main/java/com/runt/open/mvvm/retrofit/converter/DecryptGsonResponseBodyConverter.java
@@ -2,16 +2,15 @@
 
 import android.util.Log;
 
-import com.runt.open.mvvm.data.HttpApiResult;
-import com.runt.open.mvvm.util.GsonUtils;
 import com.google.gson.Gson;
 import com.google.gson.JsonIOException;
 import com.google.gson.TypeAdapter;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonToken;
+import com.runt.open.mvvm.data.HttpApiResult;
+import com.runt.open.mvvm.util.GsonUtils;
 
 import org.json.JSONException;
-import org.json.JSONObject;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -84,11 +83,11 @@
      */
     protected String decryptJsonStr(String body) throws Exception {
         Log.e("Converter","decryptJsonStr body:"+body);
-        if(body.indexOf("{") == 0) {
+        /*if(body.indexOf("{") == 0) {
             JSONObject json = new JSONObject(body);
             body = json.toString();
             //body = RSAUtils.decrypt(json.getString(ENCRYPT), RSAUtils.getPublicKey(RSAUtils.PUBLIC_KEY));//
-        }
+        }*/
         return transHump? GsonUtils.toHumpJson(body):body;
     }
 
diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/utils/RetrofitUtils.java b/app/src/main/java/com/runt/open/mvvm/retrofit/utils/RetrofitUtils.java
index 134853b..4110036 100644
--- a/app/src/main/java/com/runt/open/mvvm/retrofit/utils/RetrofitUtils.java
+++ b/app/src/main/java/com/runt/open/mvvm/retrofit/utils/RetrofitUtils.java
@@ -107,7 +107,7 @@
                 //设置OKHttpClient
                 .client(client)
                 //设置baseUrl,注意,baseUrl必须后缀"/"
-                .baseUrl(BuildConfig.HOST_IP_ADDR+"api/v1/")
+                .baseUrl(BuildConfig.HOST_IP_ADDR+"api/v2/")
                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                 .build();
     }
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java
index 090cfa4..b6c9ae6 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java
@@ -60,12 +60,8 @@
         mBinding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
 
             @Override
-            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-                setTitleStr(position);
-            }
-
-            @Override
             public void onPageSelected(int position) {
+                setTitleStr(position);
                 mBinding.navView.getMenu().getItem(position).setChecked(true);
                 if(position == 2 && UserBean.getUser() == null){
                     loginLaunch.launch(new Intent(mContext, RegisterLoginActivity.class));
@@ -142,12 +138,7 @@
         PermissionX.init(MainActivity.this)
                 .permissions(Manifest.permission.READ_PHONE_STATE)
                 .request((allGranted, grantedList, deniedList) -> {
-                    if(allGranted){
-                        PhoneDevice.setDevice(mContext);
-                    }else{
-                        showPermissionDialog();
-                    }
-
+                    PhoneDevice.setDevice(mContext);
                 });
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java
index 1d83123..b5d5f73 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java
@@ -1,9 +1,8 @@
 package com.runt.open.mvvm.ui.main.home;
 
 import com.runt.open.mvvm.base.model.LoadPageViewModel;
-import com.runt.open.mvvm.data.Results;
 
-public class HomeViewModel extends LoadPageViewModel<Results.MessageResult> {
+public class HomeViewModel extends LoadPageViewModel<Message> {
 
     @Override
     protected String requestUrl() {
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/home/Message.java b/app/src/main/java/com/runt/open/mvvm/ui/main/home/Message.java
index 4aede0c..c25dc5f 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/home/Message.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/home/Message.java
@@ -4,5 +4,5 @@
  * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/7/27.
  */
 public class Message {
-    public String content,cTime,title;
+    public String id,title,content,cTime;
 }
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/home/MsgAdapter.java b/app/src/main/java/com/runt/open/mvvm/ui/main/home/MsgAdapter.java
index c13fc9e..f9ad43e 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/home/MsgAdapter.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/home/MsgAdapter.java
@@ -7,8 +7,6 @@
 import com.runt.open.mvvm.listener.CustomClickListener;
 import com.runt.open.mvvm.util.HandleDate;
 
-import java.util.Date;
-
 /**
  * My father is Object, ites purpose of
  *
@@ -20,8 +18,7 @@
     @Override
     protected void onBindView(ItemMsgBinding binding, int position, Message message) {
         binding.txtDetail.setText(message.content);
-        Date date = new Date(message.cTime);
-        binding.txtTime.setText(HandleDate.getTimeStateNew(date));
+        binding.txtTime.setText(HandleDate.getTimeStateNew(HandleDate.getDateTimeToLong(message.cTime)));
         binding.txtTitle.setText(message.title);
         binding.getRoot().setOnClickListener(new CustomClickListener() {
             @Override
diff --git a/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java b/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java
index 98e9010..4ba6de4 100644
--- a/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java
+++ b/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java
@@ -67,6 +67,15 @@
         return secondsdf.format(date);
     }
 
+    public static long getDateTimeToLong(String datetime) {
+        try {
+            return secondsdf.parse(datetime).getTime();
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
     /**
      * 将指定long类型的日期转换为string时间 只显示 时分秒
      */

--
Gitblit v1.9.1