nilupeng
2022-08-09 f7237e21b9752946ac65aa79ad2f9c7ee0f23744
分页框架优化
10 files modified
88 ■■■■■ changed files
app/src/main/java/com/runt/open/mvvm/base/model/LoadPageViewModel.java 34 ●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java 3 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java 8 ●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/retrofit/converter/DecryptGsonResponseBodyConverter.java 9 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/retrofit/utils/RetrofitUtils.java 2 ●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java 13 ●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java 3 ●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/ui/main/home/Message.java 2 ●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/ui/main/home/MsgAdapter.java 5 ●●●● patch | view | raw | blame | history
app/src/main/java/com/runt/open/mvvm/util/HandleDate.java 9 ●●●●● patch | view | raw | blame | history
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;
    }
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();
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);
}
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;
    }
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();
    }
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);
                });
    }
}
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() {
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;
}
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
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时间 只显示 时分秒
     */