600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > day36 rx全家桶

day36 rx全家桶

时间:2020-05-06 08:02:13

相关推荐

day36 rx全家桶

简介

Rx(Reactive Extensions)是一个库,用来处理事件和异步任务,在很多语言上都有实现,RxJava是Rx在Java上的实现。简单来说,RxJava就是处理异步的一个库,最基本是基于观察者模式来实现的。通过Obserable和Observer的机制,实现所谓响应式的编程体验。

官网:/ReactiveX/RxJava

/ReactiveX/RxAndroid

基本使用:

Observable被观察者;Observer 观察者;

线程调度:

observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())

操作符

依赖

//rxlifecycle依赖->管理生命周期implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'//rxpermission->6.0动态权限申请框架implementation 'com.tbruyelle.rxpermissions2:rxpermissions:+'//okhttp依赖api 'com.squareup.okhttp3:okhttp:3.11.0'//okhttp日志拦截器api 'com.squareup.okhttp3:logging-interceptor:3.11.0'//gsonapi 'com.google.code.gson:gson:2.8.5'//rxjavaapi 'io.reactivex.rxjava2:rxjava:2.2.3'//rxandroidapi 'io.reactivex.rxjava2:rxandroid:2.1.0'//retrofit网络请求框架api 'com.squareup.retrofit2:retrofit:2.4.0'//retrofit下gson插件->网络请求回数据自动使用gson解析api 'com.squareup.retrofit2:converter-gson:2.4.0'//retrofit下使用rxjava线程调度插件api 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

常用注解

代码

rx全家桶二次封装

public class RetrofitManager {private RetrofitManager() {}private static RetrofitManager retrofitManager = null;public static RetrofitManager getInstance(){if (retrofitManager == null){retrofitManager = new RetrofitManager();}return retrofitManager;}private Retrofit retrofit = null;public Retrofit getRetrofit(){if (retrofit == null)buildRetrofit();return retrofit;}private void buildRetrofit(){HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);OkHttpClient.Builder okBuilder = new OkHttpClient.Builder();okBuilder.addInterceptor(interceptor);okBuilder.connectTimeout(1, TimeUnit.MINUTES);okBuilder.readTimeout(1,TimeUnit.MINUTES);Retrofit.Builder builder = new Retrofit.Builder();builder.client(okBuilder.build());builder.baseUrl("http://169.254.163.202/yoho/");//公共接口地址,必须以/结尾builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());builder.addConverterFactory(GsonConverterFactory.create());retrofit = builder.build();}}

获得的数据实体类

public class UploadEntity {public String statues;public String msg;}

public class RecommendEntity {public String statues;public String msg;}

public class GetEntity {public String statues;public String msg;}

api接口

public interface Api {//get请求@GET("Home_banner.php")Observable<GetEntity> requestGet();//post请求@FormUrlEncoded@POST("brand_goods.php")Observable<RecommendEntity> requestPost(@Field("request")String request);//上传图片@Multipart@POST("upload_head.php")Observable<UploadEntity> uploadImg(@Part List<MultipartBody.Part> list);}

acyivity

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);}@OnClick({R.id.btn_permission,R.id.btn_download,R.id.btn_post,R.id.btn_get,R.id.btn_upload})public void onClick(View view){switch (view.getId()){case R.id.btn_permission:Toast.makeText(this, "permission", Toast.LENGTH_SHORT).show();RequestPermission();break;case R.id.btn_download:break;case R.id.btn_post:retrofitPost();break;case R.id.btn_get:retrofitGet();break;case R.id.btn_upload:uploadImg();break;}}//申请权限方法private void RequestPermission(){RxPermissions permissions = new RxPermissions(this);permissions.request(Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(new Observer<Boolean>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(Boolean aBoolean) {Toast.makeText(MainActivity.this, "申请:"+aBoolean, Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}private void retrofitGet(){RetrofitManager.getInstance().getRetrofit().create(Api.class).requestGet().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<GetEntity>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(GetEntity getEntity) {Toast.makeText(MainActivity.this, "请求成功 "+getEntity.msg, Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}private void retrofitPost(){JSONObject jsonObject = new JSONObject();try {jsonObject.put("brand","1");jsonObject.put("page","1");} catch (JSONException e) {e.printStackTrace();}RetrofitManager.getInstance().getRetrofit().create(Api.class).requestPost(jsonObject.toString()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<RecommendEntity>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(RecommendEntity recommendEntity) {Toast.makeText(MainActivity.this, "请求成功 "+recommendEntity.msg, Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}private void uploadImg(){File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/Camera/tou1.png");Log.i("yj",file.getAbsolutePath()+file.getName());MultipartBody.Builder builder = new MultipartBody.Builder();builder.setType(MultipartBody.FORM);RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),file);builder.addFormDataPart("uploadedfile","yj.png",requestBody);builder.addFormDataPart("userid","1");RetrofitManager.getInstance().getRetrofit().create(Api.class).uploadImg(builder.build().parts()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<UploadEntity>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(UploadEntity uploadEntity) {Toast.makeText(MainActivity.this, uploadEntity.msg, Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。