MVP+Retrofit+Okhttp+RxJava
来源:互联网 发布:java初级工程师招聘 编辑:程序博客网 时间:2024/05/29 17:29
App的build.gradle依赖包:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包 compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包 compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包 compile 'com.facebook.fresco:fresco:0.11.0' compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
接口地址类:
public class API { //接口:APIKEY=‘71e58b5b2f930eaf1f937407acde08fe’ http://api.tianapi.com/nba/?key=APIKEY&num=10 public static final String HOST="http://api.tianapi.com/nba/"; //接口:http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage public static final String BASE_URL= "http://result.eolinker.com/"; public static final String TOKEN= "umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611";}
public interface ServiceAPI { @GET(API.HOST) // Call<NewsBean> getNews(@Query("key")String n,@Query("num") int i); public Flowable<NewsBean> getNews(@Query("key")String n,@Query("num") int i); // @GET("{token}") // public Flowable<ShopResponse<HomeData>> homepage(@Path("token") String token, @Query("uri") String uri);}
对Retrofit的封装:
public class RetrofitHelper { private static OkHttpClient client; private static ServiceAPI serviceAPI; static { getClient(); } public static OkHttpClient getClient(){ if(client==null){ synchronized (OkHttpClient.class){ if(client==null){ client=new OkHttpClient(); } } } return client; } public static ServiceAPI getServiceAPI(){ if(serviceAPI==null){ synchronized (ServiceAPI.class){ if(serviceAPI==null){ serviceAPI=onCreate(ServiceAPI.class,API.HOST); } } } return serviceAPI; } public static <T> T onCreate(Class<T> tclass, String url){ Retrofit build = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(client) .build(); return build.create(tclass); }}
封装Bean类省略
MVP
Model层:
public interface CGSB <T>{ void chengGong(T t); void shiBai(Call<T> call);}
public interface NewsModelJK { void getNews(String url, int i, CGSB<NewsBean> cgsb);}
public class NewsModel implements NewsModelJK { public void getNews(String url, int i, final CGSB<NewsBean> cgsb){ Flowable<NewsBean> obserable = RetrofitHelper.getServiceAPI().getNews(url, i);//被观察者 obserable.subscribeOn(Schedulers.io())//被观察者 Scheduler (调度器) .observeOn(AndroidSchedulers.mainThread()) //观察者 切换到主线程 .subscribe(new Consumer<NewsBean>() { @Override public void accept(NewsBean newsBean) throws Exception { //调用成功的方法 cgsb.chengGong(newsBean); } }); }}
P层:
public interface INews { void showBean(NewsBean newsBean);}
public class NewsPersenter { private final NewsModel newsModel; private INews iNews; public NewsPersenter(INews iNews) { newsModel = new NewsModel(); this.iNews=iNews; } public void getNews(final String n, int i){ newsModel.getNews(n, i, new CGSB<NewsBean>() { @Override public void chengGong(NewsBean newsBean) { iNews.showBean(newsBean); } @Override public void shiBai(Call<NewsBean> call) { } }); }}
public class MainActivity extends AppCompatActivity implements INews { private XRecyclerView mXrlv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); NewsPersenter newsPersenter = new NewsPersenter(this); newsPersenter.getNews("71e58b5b2f930eaf1f937407acde08fe", 10); /** * 沉浸式 */ initState(); } @Override public void showBean(NewsBean newsBean) { // Log.i("Tag", newsBean.getMsg()); List<NewsBean.NewslistBean> newslist = newsBean.getNewslist(); mXrlv.setLayoutManager(new LinearLayoutManager(this)); MyAdapter myAdapter = new MyAdapter(newslist, this); mXrlv.setAdapter(myAdapter); } private void initView() { mXrlv = (XRecyclerView) findViewById(R.id.xrlv); } /** * 沉浸式状态栏 */ private void initState() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } }}
阅读全文
1 0
- RxJava+Retrofit+OkHttp+mvp
- mvp+rxjava+retrofit+okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- Rxjava+Retrofit+okhttp+mvp实现
- 简单MVP-Retrofit-Rxjava-OKhttp
- mvp demo:mvp+rxjava+retrofit(okhttp)+greendao
- RxJava+okhttp+Retrofit+Mvp 的封装
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- rxjava+retrofit+okhttp+mvp 简单实践
- MVP+Retrofit+RxJava+Okhttp拦截器
- MVP+Retrofit+RxJava+Okhttp拦截器
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- MVP+Rxjava+Okhttp+Retrofit+XRecyclerview请求数据
- Okhttp+Retrofit+Rxjava+MVP联合使用
- MVP泛型+RecyclerView+Retrofit+OkHttp+RxJava
- RxJava RxAndroid Retrofit RxBus Dragger2 OkHttp MVP MVVM DataBinding
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- POJ-2387 Til the Cows Come Home
- Linux 使用echo打印出彩色日志
- Swagger2用法
- 解决:本地计算机无法复制文件到远程计算机
- CentOS下(rsync+inotify)监听式实现服务器间的备份实时同步
- MVP+Retrofit+Okhttp+RxJava
- android使用命令行空包签名
- web跨域请求——JSONP
- 组合空间数据加减
- 【版本升级】MyEclipse 2017 CI 9 发布(附下载)
- 深入理解ASP.NET MVC(目录)、打造自己的MVC框架
- MySQL主从同步部署
- 关于sql server 2008安装闪退问题解决
- CSS浮动(float,clear)通俗讲解