1.导入依赖
//配置retrofit2.0 implementation 'com.squareup.retrofit2:retrofit:+' implementation 'com.squareup.retrofit2:converter-gson:+' //配置支持Rxjava2 implementation 'com.squareup.retrofit2:adapter-rxjava2:+' implementation 'io.reactivex.rxjava2:rxjava:+' implementation 'io.reactivex.rxjava2:rxandroid:+' //图片加载框 implementation 'com.facebook.fresco:fresco:1.5.0' implementation 'com.android.support:recyclerview-v7:27+'2.
2.添加网络权限
3.网络请求框架
package com.example.thinkpad.wsjmonitwo.utils; import com.example.thinkpad.wsjmonitwo.constant.ConstantApi; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitManager { private static String BASE_URL = ConstantApi.BASE_URL; private Retrofit mRetrofit; private static class SingleHolder { private static final RetrofitManager _INSTANT = new RetrofitManager(BASE_URL); } public static RetrofitManager getDefault() { return SingleHolder._INSTANT; } private RetrofitManager(String baseUrl) { mRetrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .client(buildOkhttpClinet()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } private OkHttpClient buildOkhttpClinet() { return new OkHttpClient.Builder() .readTimeout(5, TimeUnit.SECONDS) .build(); } public <T> T create(Class<T> Clazz) { return mRetrofit.create(Clazz); } }
4.抽基类
package com.example.thinkpad.wsjmonitwo.base; import io.reactivex.disposables.CompositeDisposable; public abstract class BasePresenter <V extends IView>{ protected CompositeDisposable compositeDisposable= new CompositeDisposable(); protected V view; public BasePresenter(V view){ this.view=view; initModel(); } protected abstract void initModel(); void onDestroy(){ view= null; compositeDisposable.clear(); } }
package com.example.thinkpad.wsjmonitwo.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; public abstract class BeanActivity <P extends BasePresenter> extends AppCompatActivity{ protected P presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(provideLayoutId()); //获取id initview(); presenter=providePresenter(); //请求数据 initData(); //点击事件 initListener(); } protected abstract P providePresenter(); protected abstract int provideLayoutId(); protected abstract void initListener(); protected abstract void initData(); protected abstract void initview(); @Override protected void onDestroy() { presenter.onDestroy(); super.onDestroy(); } }
package com.example.thinkpad.wsjmonitwo.base; public interface IView { }
5.配置
package com.example.thinkpad.wsjmonitwo.constant; public class ConstantApi { public static final String BASE_URL = "http://apis.juhe.cn/"; // public static final String LOGING = "query"; // public static final String REGISTER = ""; }
6.model接口
package com.example.thinkpad.wsjmonitwo.model; import com.example.thinkpad.wsjmonitwo.bean.CaipuBean; import io.reactivex.Observable; import retrofit2.http.GET; import retrofit2.http.Query; public interface IModel { @GET("cook/query") Observable<CaipuBean> login(@Query("key") String key, @Query("menu") String menu); }
7.model类
package com.example.thinkpad.wsjmonitwo.model; import com.example.thinkpad.wsjmonitwo.bean.CaipuBean; import com.example.thinkpad.wsjmonitwo.utils.RetrofitManager; import io.reactivex.Observable; public class LoginModel { public Observable<CaipuBean> login(final String key, String menu) { return RetrofitManager.getDefault().create(IModel.class).login(key,menu); } }
8.p层接口
package com.example.thinkpad.wsjmonitwo.presenter; import com.example.thinkpad.wsjmonitwo.base.BasePresenter; import com.example.thinkpad.wsjmonitwo.bean.CaipuBean; import com.example.thinkpad.wsjmonitwo.model.LoginModel; import com.example.thinkpad.wsjmonitwo.view.ILoginView; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; public class LoginPresenter extends BasePresenter<ILoginView> { private LoginModel loginModel; public LoginPresenter(ILoginView view) { super(view); } @Override protected void initModel() { loginModel = new LoginModel(); } public void login(String key,String menu){ loginModel.login(key,menu) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<CaipuBean>() { @Override public void onSubscribe(Disposable d) { compositeDisposable.add(d); } //成功 @Override public void onNext(CaipuBean caipuBean) { if(view!=null){ view.onLoginSuccess(caipuBean); } } //失败 @Override public void onError(Throwable e) { if (view!=null){ view.onLoginFaild(e.toString()); } } @Override public void onComplete() { } }); } }
9.
Fresco必须要初始化的类 必须要在清单文件中实现
package com.example.thinkpad.wsjmonitwo.app; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; public class Myapp extends Application{ @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }