MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
来源:互联网 发布:从网络怎么找到打印机 编辑:程序博客网 时间:2024/06/05 23:53
添加依赖:
//recyclerView获取数据compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'//butterknife注解implementation 'com.jakewharton:butterknife:8.8.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'// frescocompile 'com.facebook.fresco:fresco:0.12.0'// Retrofit库compile 'com.squareup.retrofit2:retrofit:2.0.1'// rxjava+rxandroid+retrofit2+okhttpcompile 'io.reactivex:rxjava:1.0.14'compile 'io.reactivex:rxandroid:1.0.1'compile 'com.squareup.retrofit2:converter-gson:2.0.1'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'//gson解析数据compile 'com.google.code.gson:gson:2.6.2'
添加权限:
<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" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
public interface IView { void showList(List<MyBean.DataBean> list); void showError(String e);}
public class Api { //http://mnews.gw.com.cn/wap/data/news/txs/page_1.json public static final String PATH = "http://mnews.gw.com.cn/";}
public interface ApiService { @GET("wap/data/news/txs/page_{pages}.json") Observable<List<MyBean>> getdatas(@Path("pages")int pages) ;}
public interface OnRequestListener { void OnSuccess(List<MyBean.DataBean> list); void OnError(String e);}
public interface IModel { void RequestData(String url,int page,OnRequestListener onRequestListener);}
public class ListModel implements IModel { @Override public void RequestData(String url,int page, final OnRequestListener onRequestListener) { //retrofit网络请求 Retrofit retrofit=new Retrofit .Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); //结合rxjava Observable<List<MyBean>> getdatas = apiService.getdatas(page); getdatas.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<MyBean>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { onRequestListener.OnError(e.getMessage().toString()); } @Override public void onNext(List<MyBean> myBeen) { List<MyBean.DataBean> data = myBeen.get(0).data; onRequestListener.OnSuccess(data); } }); }}
public interface IPresenter { void loadList(String url,int page);}
public class ListPresenter implements IPresenter { private IView iView; private IModel iModel; public ListPresenter(IView iView) { this.iView = iView; iModel = new ListModel(); } //model层与view层交互 @Override public void loadList(String url,int page) { iModel.RequestData(url,page, new OnRequestListener() { @Override public void OnSuccess(List<MyBean.DataBean> list) { iView.showList(list); } @Override public void OnError(String e) { iView.showError(e); } }); }}
public class MyBean {public HeaderBean header;public List<DataBean> data;public static MyBean objectFromData(String str) { return new Gson().fromJson(str, MyBean.class);}public static class HeaderBean {public int pagesize; public String last; public String pre; public String next; public int totalsize; public String first; public int totalpage; public static HeaderBean objectFromData(String str) { return new Gson().fromJson(str, HeaderBean.class); }}public static class DataBean {public String summary; public String img; public String advTypeShare; public String url; public int countid; public String id; public String title; public String otime; public String source; public String views; public String resType; public static DataBean objectFromData(String str) { return new Gson().fromJson(str, DataBean.class); } }}
在清单列表注册android:name=".App"public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context context; private List<MyBean.DataBean> list; public MyAdapter(Context context, List<MyBean.DataBean> list) { this.context = context; this.list = list; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) { holder.img.setImageURI(list.get(position).img); holder.tv.setText(list.get(position).title); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ public SimpleDraweeView img; public TextView tv; public ViewHolder(View itemView) { super(itemView); img=itemView.findViewById(R.id.item_img); tv=itemView.findViewById(R.id.tv); } }}
public class MainActivity extends AppCompatActivity implements IView{ private RecyclerView recycler; private MyAdapter myAdapter; private int p=1; private SwipeRefreshLayout swif; private ListPresenter listPresenter; private LinearLayoutManager linearLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recycler = (RecyclerView) findViewById(R.id.recycler); swif = (SwipeRefreshLayout) findViewById(R.id.swif); linearLayoutManager = new LinearLayoutManager(MainActivity.this); recycler.setLayoutManager(linearLayoutManager); listPresenter = new ListPresenter(this); listPresenter.loadList(Api.PATH,p); } @Override public void showList(final List<MyBean.DataBean> list) { //设置recyclerview展示 myAdapter = new MyAdapter(MainActivity.this, list); recycler.setAdapter(myAdapter); recycler.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition(); if (lastVisibleItemPosition == list.size() - 1) { p++; listPresenter.loadList(Api.PATH,p); } } }); swif.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { p++; listPresenter.loadList(Api.PATH,p); swif.setRefreshing(false); } }); } @Override public void showError(String e) { Toast.makeText(this, "" + e, Toast.LENGTH_SHORT).show(); Log.e("哈哈哈哈啊哈哈哈哈", e); }}
//主页面布局<android.support.v4.widget.SwipeRefreshLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/swif"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recycler"></android.support.v7.widget.RecyclerView></android.support.v4.widget.SwipeRefreshLayout>//Adapter布局<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/item_img" android:layout_width="150dp" android:layout_height="150dp" android:layout_margin="8dp" fresco:failureImage="@mipmap/ic_launcher" /><TextView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tv" android:text="dfdf" android:gravity="center"/>
public interface IView { void showList(List<MyBean.DataBean> list); void showError(String e);}
public class Api { //http://mnews.gw.com.cn/wap/data/news/txs/page_1.json public static final String PATH = "http://mnews.gw.com.cn/";}
public interface ApiService { @GET("wap/data/news/txs/page_{pages}.json") Observable<List<MyBean>> getdatas(@Path("pages")int pages) ;}
public interface OnRequestListener { void OnSuccess(List<MyBean.DataBean> list); void OnError(String e);}
public interface IModel { void RequestData(String url,int page,OnRequestListener onRequestListener);}
public class ListModel implements IModel { @Override public void RequestData(String url,int page, final OnRequestListener onRequestListener) { //retrofit网络请求 Retrofit retrofit=new Retrofit .Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); //结合rxjava Observable<List<MyBean>> getdatas = apiService.getdatas(page); getdatas.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<MyBean>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { onRequestListener.OnError(e.getMessage().toString()); } @Override public void onNext(List<MyBean> myBeen) { List<MyBean.DataBean> data = myBeen.get(0).data; onRequestListener.OnSuccess(data); } }); }}
public interface IPresenter { void loadList(String url,int page);}
public class ListPresenter implements IPresenter { private IView iView; private IModel iModel; public ListPresenter(IView iView) { this.iView = iView; iModel = new ListModel(); } //model层与view层交互 @Override public void loadList(String url,int page) { iModel.RequestData(url,page, new OnRequestListener() { @Override public void OnSuccess(List<MyBean.DataBean> list) { iView.showList(list); } @Override public void OnError(String e) { iView.showError(e); } }); }}
public class MyBean {public HeaderBean header;public List<DataBean> data;public static MyBean objectFromData(String str) { return new Gson().fromJson(str, MyBean.class);}public static class HeaderBean {public int pagesize; public String last; public String pre; public String next; public int totalsize; public String first; public int totalpage; public static HeaderBean objectFromData(String str) { return new Gson().fromJson(str, HeaderBean.class); }}public static class DataBean {public String summary; public String img; public String advTypeShare; public String url; public int countid; public String id; public String title; public String otime; public String source; public String views; public String resType; public static DataBean objectFromData(String str) { return new Gson().fromJson(str, DataBean.class); } }}
在清单列表注册android:name=".App"
public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context context; private List<MyBean.DataBean> list; public MyAdapter(Context context, List<MyBean.DataBean> list) { this.context = context; this.list = list; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) { holder.img.setImageURI(list.get(position).img); holder.tv.setText(list.get(position).title); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ public SimpleDraweeView img; public TextView tv; public ViewHolder(View itemView) { super(itemView); img=itemView.findViewById(R.id.item_img); tv=itemView.findViewById(R.id.tv); } }}
public class MainActivity extends AppCompatActivity implements IView{ private RecyclerView recycler; private MyAdapter myAdapter; private int p=1; private SwipeRefreshLayout swif; private ListPresenter listPresenter; private LinearLayoutManager linearLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recycler = (RecyclerView) findViewById(R.id.recycler); swif = (SwipeRefreshLayout) findViewById(R.id.swif); linearLayoutManager = new LinearLayoutManager(MainActivity.this); recycler.setLayoutManager(linearLayoutManager); listPresenter = new ListPresenter(this); listPresenter.loadList(Api.PATH,p); } @Override public void showList(final List<MyBean.DataBean> list) { //设置recyclerview展示 myAdapter = new MyAdapter(MainActivity.this, list); recycler.setAdapter(myAdapter); recycler.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition(); if (lastVisibleItemPosition == list.size() - 1) { p++; listPresenter.loadList(Api.PATH,p); } } }); swif.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { p++; listPresenter.loadList(Api.PATH,p); swif.setRefreshing(false); } }); } @Override public void showError(String e) { Toast.makeText(this, "" + e, Toast.LENGTH_SHORT).show(); Log.e("哈哈哈哈啊哈哈哈哈", e); }}
//主页面布局<android.support.v4.widget.SwipeRefreshLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/swif"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recycler"></android.support.v7.widget.RecyclerView></android.support.v4.widget.SwipeRefreshLayout>
//Adapter布局<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/item_img" android:layout_width="150dp" android:layout_height="150dp" android:layout_margin="8dp" fresco:failureImage="@mipmap/ic_launcher" /><TextView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tv" android:text="dfdf" android:gravity="center"/>
阅读全文
0 0
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- MVP+RxJava+Retryfit+RecyclerView多条目展示
- MVP+RXJava+Retryfit使用post解析
- Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据
- MVP+retrofit和Rxjava请求数据+recyclerview展示
- recyclerview展示数据(MVP)
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- Retrofit+RxJava+Okhttp+RecycleView+MVP简单的展示数据
- MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示
- MVp+RXJava+Retrofit+RecyclerView展示首页和详情页
- MVP模式OKhttp请求RecyclerView展示数据
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- RecyclerView加载数据进行展示
- 本文以实例形式展示了php解析json数据的方法
- android studio app 前端获取json数据以对象的形式来解析展示
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- RecyclerView的多条目展示,使用OkHttp解析数据
- 如何可以让div内的元素不换行?
- 规划、部署、监控Flume
- Spark调优(数据序列化和内存调优)
- mybatis系列三:使用MyBatis实现持久化操作
- linux里grep和egrep,fgrep的区别
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- JavaDay03--Notes(数组的遍历和部分拷贝+方法的调用、参数和返回值)
- 一起学习thymeleaf模板引擎
- LINK : fatal error LNK1104: 无法打开文件“LIBCMT.lib”
- PHP 自动写日志,文件写入
- shell 中 if then语句中会跟着-ne -ge之类的语句
- java中字符串截取,调用substring()方法
- angularjs实例代码
- 正则表达式(grep,egrep,fgrep)