首先先看一下我的分包
interfaces:API接口地址;
网络请求框架;
mvp: model:bean类;
presenter:逻辑处理;
view:返回成功或失败的方法;
view:activity
fragment
接下来看代码
一.在AndroidManifest.xml中添加网络权限二.在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
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;
public interface ApiInterface {
@GET("xxx/xxx/xxx")
Observable testbean(@QueryMap HashMap 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;
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 create(final Class service){
return retrofit.create(service);
}
}
四.mvp框架
model包:
baseModel
public class baseModel{ 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
public class TestBean {
}
presenter包:
basePresenter
public class basePresenter{ 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; public class TestPresenter extends basePresenterview包:{ public void getdata(HashMap hashMap){ ApiInterface api = RetrofitUtil.getInstance().create(ApiInterface.class); api.testbean(hashMap).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer () { @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() { } }); } }
baseView
public interface baseView {
}
TestView
import androidx.annotation.NonNull; public interface TestView五:Activity中发起请求extends baseView { void onTestSuccess(@NonNull T t); void onTestFailure(String msg); }
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{ 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 hashMap = new HashMap<>(); hashMap.put("",""); testPresenter.getdata(hashMap); } @Override public void onTestSuccess(@NonNull TestBean testBean) { Log.d(TAG,"请求成功"); } @Override public void onTestFailure(String msg) { Log.d(TAG,"请求失败"); } }



