RetrofitUtils工具类
public class RetrofitUtils {
private static RetrofitUtils retrofitUtils;//工具类对象
private static ApiFunction apiFunction;//请求网络接口
public static OkHttpClient okHttpClient;
//静态快,获取OkHttpClient对象
static {
getOkHttpClient();
}
//单例锁模式
public static RetrofitUtils getInstence(){
if(retrofitUtils==null){
synchronized (RetrofitUtils.class){
if (retrofitUtils==null){
retrofitUtils=new RetrofitUtils();
}
}
}
return retrofitUtils;
}
//单例模式获取okhttp
public static OkHttpClient getOkHttpClient(){
if(okHttpClient==null){
synchronized (OkHttpClient.class){
if(okHttpClient==null){
File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");
long fileSize = 10 * 1024 * 1024;
okHttpClient=new OkHttpClient.Builder()
.addInterceptor(new MyInter())
//打印拦截器日志
.addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.connectTimeout(15, TimeUnit.SECONDS)//设置连接超时时间
.readTimeout(15, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(15, TimeUnit.SECONDS)//设置写入超时时间
//.cache(new Cache(fileDir,fileSize))//写入sd卡
.build();
}
}
}
return okHttpClient;
}
//私有的无参构造
private RetrofitUtils(){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(Constants.Base_url)
.addConverterFactory(GsonConverterFactory.create())//添加gson转换器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava转换器
.client(okHttpClient)//添加okhttp
.build();
apiFunction=retrofit.create(ApiFunction.class);
}
//获取
public ApiFunction API(){
return apiFunction;
}
//拦截器
static class MyInter implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
//获取原来的body
Request request = chain.request();
RequestBody body = request.body();
if (body instanceof FormBody) {
//遍历原来的所有参数,加到新的Body里面,最后将公共参数加到新的Body
FormBody.Builder newBuilder = new FormBody.Builder();
for (int i = 0; i < ((FormBody) body).size(); i++) {
String name = ((FormBody) body).name(i);
String value = ((FormBody) body).value(i);
//放入新的
newBuilder.add(name, value);
}
//在将公共参数添加进去
FormBody newBody = newBuilder.add("source", "android").
add("appVersion","101")
.add("token","5A4143DE8859115F3B4C510056C9B4A7")
.build();
//创建新的请求
Request build = request.newBuilder().post(newBody).build();
Response response = chain.proceed(build);
return response;
}
return null;
}
}
}
ApiFunction类
public interface ApiFunction {
@POST
@FormUrlEncoded
Observable<BaseUser> regRetrofit(@Url String url, @FieldMap Map<String, String> map);
}
Constants类
public class Constants {
public static String Base_url="https://www.zhaoapi.cn/";
public static String Reg_url="quarter/register";
}
Imodel
public interface Imodel {
void regDate(String url, Map<String,String> map,LoadListener loadListener);
}
Imodelmpl
public class Imodelmpl implements Imodel {
@Override
public void regDate(String url, Map<String, String> map, final LoadListener loadListener) {
RetrofitUtils.getInstence()
.API()
.regRetrofit(url,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseUser>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(BaseUser value) {
loadListener.success(value);
}
@Override
public void onError(Throwable e) {
loadListener.error(e.toString());
}
@Override
public void onComplete() {
}
});
}
}
Ipresnter
public interface Ipresenter {
void RegPresenter(Map<String,String> map,String ur);
}
Ipresentermpl
public class Ipresentermpl implements Ipresenter {
RegView regView;
Imodel imodel;
public Ipresentermpl(RegView regView) {
if (imodel==null){
imodel=new Imodelmpl();
}
this.regView = regView;
}
@Override
public void RegPresenter(Map<String, String> map, String url) {
imodel.regDate(url, map, new LoadListener() {
@Override
public void success(Object o) {
BaseUser u = (BaseUser) o;
if (u.getCode().equals("0")){
regView.Success(o);
}{
regView.Error(u.getMsg());
}
}
@Override
public void error(String error) {
regView.Error(error);
}
});
}
}
LoadListener
public interface LoadListener {
void success(Object o);
void error(String error);
}
RegView
public interface RegView {
//成功
void Success(Object o);
void Error(String error);
}
MainActivity
public class MainActivity extends AppCompatActivity implements RegView{
private View reg;
private Ipresentermpl ipresentermpl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
reg = findViewById(R.id.reg);
reg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reg();
}
});
}
private void reg() {
Map<String,String> map=new HashMap<>();
map.put("mobile","13756795444");
map.put("password","555555");
ipresentermpl = new Ipresentermpl(MainActivity.this);
ipresentermpl.RegPresenter(map,Constants.Reg_url);
}
@Override
public void Success(Object o) {
Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
}
@Override
public void Error(String error) {
Toast.makeText(this, "登陆失败", Toast.LENGTH_SHORT).show();
}
}