初始化UI
DishAdapter:
DishBean 网络下载数据。
retrofit:
获取网络数据
Retrofit+RxJava
展示
RetrofitRxJavaActivity:
public class RetrofitRxJavaActivity extends AppCompatActivity {
protected RecyclerView mRecyclerView;
protected AVLoadingIndicatorView mLoadingView;
private DishAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_retrofit_rx_java);
initView();
initData();
}
private void initView() {
mLoadingView = (AVLoadingIndicatorView) findViewById(R.id.loading_view);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mAdapter = new DishAdapter(this);
mRecyclerView.setAdapter(mAdapter);
}
// 初始化网络数据
private void initData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.qubaobei.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
DishHttpService httpService = retrofit.create(DishHttpService.class);
Observable<DishBean> observable = httpService.getDishObservable(1);
// 先将数据下载解析等操作跳转至子线程(数据变换也在子线程里)
// observable.subscribeOn();// 跳转子线程
// observable.observeOn();// 跳转主线程
observable.subscribeOn(Schedulers.io())
// 使用map操作符变换数据:DishBean -> List<DataBean>
.map(new Function<DishBean, List<DishBean.DataBean>>() {
@Override
public List<DishBean.DataBean> apply(@NonNull DishBean dishBean) throws Exception {
return dishBean.getData();
}
})
// 将最终数据返回主线程
.observeOn(AndroidSchedulers.mainThread())
// 接收最终数据是List集合
.subscribe(new Consumer<List<DishBean.DataBean>>() {
@Override
public void accept(List<DishBean.DataBean> datas) throws Exception {
// 数据加载成功,添加到适配器中展示
mAdapter.addDatas(datas);
mLoadingView.setVisibility(View.GONE);
Toast.makeText(RetrofitRxJavaActivity.this, "size:" + datas.size(), Toast.LENGTH_SHORT).show();
Log.d("1510", "size: " + datas.size());
}
}
, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("1510", "error: " + throwable.getMessage());
}
});
}
}
DishAdapter:
public class DishAdapter extends RecyclerView.Adapter<DishAdapter.ViewHolder> {
private Context mContext;
private List<DishBean.DataBean> mDatas;
public DishAdapter(Context context) {
mContext = context;
mDatas = new ArrayList<>();
}
// 为了方便后期分页加载数据,单独封装一个方法,添加数据
public void addDatas(List<DishBean.DataBean> datas) {
mDatas.addAll(datas);
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(mContext)
.inflate(R.layout.item_dish, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
DishBean.DataBean data = mDatas.get(position);
holder.mTitleTextView.setText(data.getTitle());
// Glide加载图片,和Picasso超级相似
Glide.with(mContext)
.load(data.getPic())
.into(holder.mPicImageView);
}
@Override
public int getItemCount() {
return mDatas == null ? 0 : mDatas.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView mTitleTextView;
ImageView mPicImageView;
public ViewHolder(View itemView) {
super(itemView);
mTitleTextView = (TextView) itemView.findViewById(R.id.title_text_view);
mPicImageView = ((ImageView) itemView.findViewById(R.id.pic_image_view));
}
}
}
DishBean 网络下载数据。
DishHttpService:
public interface DishHttpService {
// 获取请求数据的任务对象
// Call<DishBean> getDishCall();
// 获取产生数据的观察者对象
@GET("ios/cf/dish_list.php?stage_id=1&limit=10")
Observable<DishBean> getDishObservable(@Query("page") int page);
}
item_dish:
<?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:orientation="vertical">
<TextView
android:id="@+id/title_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/pic_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
retrofit:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="net.bwie.rxjava.activity.RetrofitRxJavaActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/loading_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:indicator="LineScaleParty"
app:indicator_color="@color/colorAccent"/>
</RelativeLayout>