• 使用mvp+rxjava+retrofit加载数据


    将mvp和rxjava和retrofit简单整合的列子,让activity的代码不再那么臃肿,只负责显示数据.


    关于mvp的介绍可以看这里, 关于Rxjava的介绍可以看这里; 关于retrofit的介绍可以看这里(看官方文档应该是最有效率的2333...); 首先看一下获取数据的接口链接: http://apicloud.mob.com/v1/weather/query?province=%E6%B9%96%E5%8D%97&key=520520test&city=%E9%95%BF%E6%B2%99; 普通的请求方式是这样的: 定义一个接口:

    public interface ApiStores {    
    String API_SERVER_URL = "http://apicloud.mob.com/v1/weather/";    
    String KEY = "...."; 
       @GET("query")   
     Call<WeatherModel> getWeatherByAddress(@Query("key") String key,@Query("province") String province, @Query("city") String city);
    }
    复制代码

    创建一个Retrofit对象:

    Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(ApiStores.API_SERVER_URL) 
    //增加返回值为Gson的支持(以实体类返回) 
    .addConverterFactory(GsonConverterFactory.create()) 
     .build();
    ApiStores service = retrofit.create(ApiStores.class);
    Call<WeatherModel> repos=service.getWeatherByAddress("湖南","长沙");
    复制代码

    然后通过返回的call 来发出网络请求:

    call.enqueue(new Callback<String>() { 
    @Override 
    public void onResponse(Call<String> call, Response<WeatherModel> response) 
    {
     Log.e("===","return:"WeatherModel.getname);//返回值直接就是对象,简直不要太爽...
    } 
    @Override 
    public void onFailure(Call<String> call, Throwable t) {
     Log.e("===","失败");
     }
    });
    复制代码

    这样已经可以完成数据的请求了,但是这样代码都在activity里,如果代码变多activity会变得臃肿起来,不够优雅...╮(╯_╰)╭


    使用mvp+rxjava+retrofit: retrofit对Rxjava的支持是非常好的,可以直接返回可观察者,像这样:

    @GET("query")
    Observable<WeatherModel> getWeatherByAddress(@Query("key") String key,@Query("province") String province, @Query("city") String city);
    复制代码

    我们拿到可观察者后,就可以订阅事件了:

    mCompositeSubscription.add(observable.subscribeOn(Schedulers.io())    
    .observeOn(AndroidSchedulers.mainThread())      
      .subscribe(subscriber));
    复制代码

    rxjava最nb的地方就是它可以很方便的切换线程不需要使用各种runOnUiThread 完整代码可以看这个;

    转载于:https://juejin.im/post/5a3396daf265da43085e1617

  • 相关阅读:
    编译Android系统源码和内核源码
    Ubuntu中的解压缩文件的方式
    将秒数转换为基于00:00的时间
    git sshkeygen Fingerprint cannot be generated解决方法
    git bash下的选择、复制、粘贴
    mac 配置jdk maven
    自定义标签
    垃圾收集器和收集算法
    多线程并发中的同步
    现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join
  • 原文地址:https://www.cnblogs.com/twodog/p/12137893.html
Copyright © 2020-2023  润新知