IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android MVP框架 -> 正文阅读

[移动开发]Android MVP框架

首先先看一下我的分包

interfaces:

????????API接口地址;

????????网络请求框架;

mvp:

????????model:

????????????????bean类;

????????presenter:

????????????????逻辑处理;

????????view:

????????????????返回成功或失败的方法;

view:

????????activity

????????fragment

接下来看代码

一.在AndroidManifest.xml中添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

二.在build.gradle中添加一些依赖

    //OKHTTP依赖
    implementation 'com.squareup.okhttp3:okhttp:3.12.0'
    implementation 'com.squareup.okio:okio:2.9.0'
    //OKHTTP的拦截器依赖
    implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
    //RXjava依赖
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    //gson解析
    implementation 'com.google.code.gson:gson:2.8.6'
    //GsonConverterFactory依赖
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

三.关于interfaces包中的类

Api
/**
 * @ClassName Api
 * @Description 服务器地址
 */

public class Api {
    public final static String BASE= "http://xxxxxxxxxx";
}
ApiInterface
import com.test.mvp.mvp.model.TestBean;
import java.util.HashMap;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;

/**
 * @ClassName ApiInterface
 * @Description 接口
 */

public interface ApiInterface {

    @GET("xxx/xxx/xxx")
    Observable<TestBean> testbean(@QueryMap HashMap<String, String> map);
}
RetrofitUtil
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * @ClassName RetrofitUtil
 * @Description 网络请求封装
 */

public class RetrofitUtil {

    private static RetrofitUtil instance;
    private final Retrofit retrofit;

    //单例模式
    public static RetrofitUtil getInstance(){
        if (instance == null){
            synchronized (RetrofitUtil.class){
                if (instance == null){
                    instance = new RetrofitUtil();
                }
            }
        }
        return instance;
    }

    //网络请求
    private RetrofitUtil(){
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .connectTimeout(10000,TimeUnit.SECONDS)
                .readTimeout(10000,TimeUnit.MILLISECONDS)
                .writeTimeout(10000,TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
        retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(Api.BASE)
                .client(okHttpClient)
                .build();
    }

    public <T> T create(final Class<T> service){
        return retrofit.create(service);
    }
}

四.mvp框架

????????model包:

BaseModel
/**
 * @ClassName BaseModel
 * @Description TODO
 */

public class BaseModel<T> {
    public int code;
    public String msg;
    public String message;
    public String url;
    public T data;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
TestBean
/**
 * @ClassName TestBean
 * @Description TODO
 */

public class TestBean {

}

? ? ? ? presenter包:

BasePresenter
/**
 * @ClassName BasePresenter
 * @Description TODO
 */

public class BasePresenter<T> {
    private T view;

    public T getView(){
        return view;
    }

    public void setView(T view) {
        this.view = view;
    }

    public void onDetach(){
        if (view != null) {
            view = null;
        }
    }
}
TestPresenter
import androidx.annotation.NonNull;
import com.test.mvp.interfaces.ApiInterface;
import com.test.mvp.interfaces.RetrofitUtil;
import com.test.mvp.mvp.model.TestBean;
import com.test.mvp.mvp.view.TestView;
import java.util.HashMap;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

/**
 * @ClassName TestPresenter
 * @Description
 */

public class TestPresenter extends BasePresenter<TestView> {
    public void getdata(HashMap<String,String> hashMap){
        ApiInterface api = RetrofitUtil.getInstance().create(ApiInterface.class);
        api.testbean(hashMap).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<TestBean>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull TestBean testBean) {
                        getView().onTestSuccess(testBean);
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        getView().onTestFailure(e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

? ? ? ? view包:

BaseView
/**
 * @ClassName BaseView
 * @Description TODO
 */

public interface BaseView {

}
TestView
import androidx.annotation.NonNull;

/**
 * @ClassName TestView
 * @Description
 */

public interface TestView<T> extends BaseView {
    /**
     * 成功
     */
    void onTestSuccess(@NonNull T t);

    /**
     * 失败
     */
    void onTestFailure(String msg);
}

五:Activity中发起请求

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.test.mvp.R;
import com.test.mvp.mvp.model.TestBean;
import com.test.mvp.mvp.presenter.TestPresenter;
import com.test.mvp.mvp.view.TestView;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements TestView<TestBean> {

    String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        test();
    }

    //请求接口
    private void test(){
        TestPresenter testPresenter = new TestPresenter();
        testPresenter.setView(this);
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("","");
        testPresenter.getdata(hashMap);
    }

    /**
     * 成功
     * @param testBean
     */
    @Override
    public void onTestSuccess(@NonNull TestBean testBean) {
        Log.d(TAG,"请求成功");
    }

    /**
     * 失败
     * @param msg
     */
    @Override
    public void onTestFailure(String msg) {
        Log.d(TAG,"请求失败");
    }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:24:56  更:2021-11-28 11:26:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:33:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码