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