Android_RxJava

初始化UI

获取网络数据

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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值