1.首先导入依赖跟权限:
//ButterKnife-依赖:compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
//fresco依赖:
compile 'com.facebook.fresco:fresco:+'
//fresco加载gif依赖:
compile 'com.facebook.fresco:animated-gif:+'
//Retrofit+Rxjava依赖:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.2.0'
//recyclerview
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
//底部第三方
compile 'com.hjm:BottomTabBar:1.1.1'
//Banner图
compile 'com.youth.banner:banner:1.4.10'
//Imageloader
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//Glide
compile 'com.github.bumptech.glide:glide:3.6.1'
//TabLayout
compile 'com.android.support:design:23.3.0'
//floatingactionbutton
compile 'com.getbase:floatingactionbutton:1.9.0'
//二维码
compile 'cn.yipianfengye.android:zxing-library:2.2'
//刷新控件springview
compile 'com.liaoinstan.springview:library:1.2.6'
//拦截器
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
二维码权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
2.我们创建一个类用来存放我们使用到的所有接口
例如:
public class MYAPI {
//登录
public static final String LOGIN="user/login";
//注册
public static final String REGISTER="user/reg";
}
3.创建一个接口,里面存放我们的请求方式以及拼接到的参数
例如:
public interface RetrofitService {
//登录
@FormUrlEncoded
@POST(MyAPI.LOGIN)
Observable<LoginBean> login(@Field("mobile") String mobile,
@Field("password") String password
);
//注册
@FormUrlEncoded
@POST(MyAPI.REG)
Observable<RegBean> reg(@Field("mobile") String mobile,
@Field("password") String password);
}
4.创建一个封装类。
public class RetrofitHelper {
public Context mCntext;
//初始化
OkHttpClient interceptor = new OkHttpClient();
//gson工厂
GsonConverterFactory factory = GsonConverterFactory.create(new GsonBuilder().create());
private static RetrofitHelper instance = null;
private Retrofit mRetrofit = null;
//单例模式
public static RetrofitHelper getInstance(Context context){
if (instance == null){
instance = new RetrofitHelper(context);
}
return instance;
}
private RetrofitHelper(Context mContext){
mCntext = mContext;
init();
}
private void init() {
resetApp();
}
private void resetApp() {
//拦截器
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
mRetrofit = new Retrofit.Builder()
.baseUrl("http://120.27.23.105/")
.client(interceptor)
.addConverterFactory(factory)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
public RetrofitService getServer(){
return mRetrofit.create(RetrofitService.class);
}
}
5.最后,我们创建一个网络请求类就能使用Retrofit+RxJava了
public class DataManager {
private RetrofitService mRetrofitService;
//构造器里获取RetrofitService
public DataManager(Context context) {
this.mRetrofitService = RetrofitHelper.getInstance(context).getServer();
}
//网络请求方法getSearchBooks
//登录
public Observable<LoginBean> getlogin(String mobile,String password){
return mRetrofitService.login(mobile, password);
}
//注册
public Observable<RegBean> getreg(String mobile,String password){
return mRetrofitService.reg(mobile,password);
}
}
Fresco加载图片:
public class MyApp extends Application {
private static MyApp mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance=this;
Fresco.initialize(this);
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();
ImageLoaderConfiguration defaultcof = ImageLoaderConfiguration.createDefault(getApplicationContext());
ImageLoader.getInstance().init(build);
}
public static MyApp getInstance(){
return mInstance;
};
}
//避免内存泄漏
P层
public void detachView() {
if (iv != null) {
iv = null;
}
}
主页面
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null) {
presenter.detachView();
presenter = null;
}
}