EventBus结合rxjava2和retrofit2网络获取
依赖:
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'org.greenrobot:eventbus:3.1.1'
网络权限:
<uses-permission android:name="android.permission.INTERNET" />
代码实现:
布局:
<cn.bingoogolapple.refreshlayout.BGARefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bga_rl"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.think.bga.BGARefreshLayout0Activity"> <android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
</android.support.v7.widget.RecyclerView> </cn.bingoogolapple.refreshlayout.BGARefreshLayout>
Activity:
public class BGARefreshLayout4Activity extends AppCompatActivity {
private RecyclerView rv;
private OkHttpClient client;
private RvAdapter adapter;
private String baseUrl = "http://www.qubaobei.com/";
private String urlAll = "http://www.qubaobei.com/ios/cf/dish_list.php/?stage_id=1&limit=10&page=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bgarefresh_layout0);
//第一步1,注册.
EventBus.getDefault().register(this);
client = new OkHttpClient
.Builder()
.build();
initView();
request();
}
private void request() {
Observable.create(new ObservableOnSubscribe<FoodInfo>() {
@Override
public void subscribe(ObservableEmitter<FoodInfo> e) throws Exception {
//发射数据的逻辑.
Response<FoodInfo> builder = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
.create(NetInterface.class)
.getDataFromNet2(urlAll)
.execute();
FoodInfo body = builder.body();
//第三步,发送事件.
EventBus.getDefault().post(body);
}
}).subscribeOn(Schedulers.io())//开启子线程
.subscribe();
}
private void initView() {
rv = (RecyclerView) findViewById(R.id.rv);
adapter = new RvAdapter(rv);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setAdapter(adapter);
}
//第二步,订阅事件,接收数据.
@Subscribe(threadMode = ThreadMode.MAIN)
public void reciveResult(FoodInfo result) {
adapter.setData(result.getData());
}
@Override
protected void onDestroy() {
super.onDestroy();
//第一步2,注销.
EventBus.getDefault().unregister(this);
}
}
子布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal"> <ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" /> <LinearLayout
android:layout_marginLeft="20dp"
android:layout_gravity="center_vertical"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"> <TextView
android:text="11111111"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text="2222222"
android:id="@+id/tv_food"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
适配器:
public class RvAdapter extends BGARecyclerViewAdapter<FoodInfo.DataBean> {
public RvAdapter(RecyclerView recyclerView) {
super(recyclerView,R.layout.item_rv);
}
@Override
protected void fillData(BGAViewHolderHelper helper, int position, FoodInfo.DataBean model) {
helper.setText(R.id.tv,model.getTitle())
.setText(R.id.tv_food,model.getFood_str())
.setImageResource(R.id.iv,R.mipmap.ic_launcher_round);
}
}
EventBus结合rxjava2和retrofit2网络获取的更多相关文章
- 使用Retrofit2+RxJava2+ProtoBuf实现网络请求
引言 Retrofit 是一个用于 Android 和 Java 平台的类型安全的,底层使用OkHttp实现网络请求框架.Retrofit 通过将 API 抽象成 Java 接口而让我们连接到 RES ...
- Android热身:通过网络获取资源并更新UI组件
Android热身:通过网络获取资源并更新UI组件 目标 点击"发送请求"按钮,下载某网页的html源码,并显示在TextView控件上:点击"清空",清除Te ...
- Android代码优化----PullToRefresh+universal-image-loader实现从网络获取数据并刷新
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android ListView从网络获取图片及文字显示
上一篇文章说的是ListView展示本地的图片以及文本,这一篇说一下如何从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析, ...
- 网络获取数据的Xml的Pull解析
网络获取的XML的Pull解析 <?xml version="1.0" encoding="utf-8" ?> - <students> ...
- 网络获取的XML的Pull解析
<?xml version="1.0" encoding="utf-8" ?> - <students> - <student x ...
- Android ListView 和 ***Adapter 从本地/网络获取歌曲列表
本文内容 环境 项目结构 测试数据 演示 1:SimpleAdapter 演示 2:BaseAdapter 演示 3:CustomLazyList 演示 4:CustomLazyCompleteLis ...
- Android LazyList 从网络获取图片并缓存
原演示地址 本文内容 环境 演示 LazyList 从网络获取图片并缓存 参考资料 本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中.该演示具备将缩 ...
- Android Volley 库通过网络获取 JSON 数据
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...
随机推荐
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- C#6.0语言规范(二) 词法结构
程式 AC#程序由一个或多个源文件组成,正式称为编译单元(编译单元).源文件是Unicode字符的有序序列.源文件通常与文件系统中的文件一一对应,但不需要此对应关系.为了获得最大的可移植性,建议使用U ...
- WebMvcConfigurer
[传送门]:详解WebMvcConfigurer接口 1. 设置跨域规则 @Configuration public class CrossOriginConfig implements WebMvc ...
- 恭喜"微微软"喜当爹,Github嫁入豪门。
今天是 Github 嫁入豪门的第 2 天,炒得沸沸扬扬的微软 Github 收购事件于昨天(06月04日)尘埃落定,微软最终以 75 亿美元正式收购 Github. 随后,Gitlab 趁势带了一波 ...
- Python内置类型(4)--数值
Python有以下三种的数值类型: 整型(integers), 浮点型(floating point numbers), 以及 复数(complex numbers).此外,布尔是整数的子类型. 数值 ...
- Hadoop生态系统之Yarn
Apache YARN(Yet Another Resource Negotiator) 是Hadoop的集群资源管理系统.YARN被引入Hadoop2最初是为了改善MapReduce的实现,但它具有 ...
- Dapper内部分享ppt
http://www.knowsky.com/887446.htmlhttp://www.tritac.com/bp-24-dapper-net-by-examplehttp://www.cnblog ...
- 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
由于在MVC中经常会使用到@Html.DropDownList方法,而该方法接收的是List<SelectListItem> 参数,因此就想着写一个扩展方法,直接把IEnumerable转 ...
- WebSocket原理与实践
开题思考:如何实现客户端及时获取服务端数据? Polling 指客户端每隔一段时间(周期性)请求服务端获取数据,可能有更新数据返回,也可能什么都没有,它并不在乎服务端数据有无更新.(Web端一般采用a ...
- Jmeter获取接口返回数组的长度
添加BeanShell PostProcessor来获取,具体代码如下: import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath ...