26
2017
09

retrofit 异步网络请求 小项目案例

使用retrofit异步获取网络数据;在原来的官方demo基础上略加修改;
具体下载链接见:http://download.csdn.net/download/u014624241/9994368

1.引入 gradle

compile ‘com.google.code.gson:gson:2.6.2’
compile ‘com.squareup.retrofit2:retrofit:2.1.0’
compile ‘io.reactivex:rxjava:1.1.0’
compile ‘io.reactivex:rxandroid:1.1.0’
compile ‘com.squareup.retrofit2:converter-gson:2.1.0’
compile ‘com.squareup.retrofit2:adapter-rxjava:2.1.0’

2.引入网络包业务,查看包结构

这里写图片描述
蓝色框内的为httpnet主要业务包;
主要就是编写BqService服务,内的业务接口;

2.1 Bqservice类


public interface BqService {


    /** * 行政区计数--取水计划 * * @param yr * @return */
    @POST("intpl/summer")
    Observable<BqAreaCountRespond> getAreaCountGwp(
            @Query("yr") String yr
    );


    /** * 行政区--取水许可 * * @return */
    @POST("wpc/summer")
    Observable<BqAreaCountRespond> getAreaCountGw(

    );

    /** * 行政区批准排污量汇总--入河排污口 * * @return */
    @POST("pdo/summer")
    Observable<BqAreaCountRespond> getAreaCountOutlet(
    );

}

2.2RetrofitManager类

主要是在这里初始化 retrofit,配置url等;

public class RetrofitManager {
    private static Retrofit retrofit;

    public static Retrofit getRetrofit(String url, Context context) {
        //判断网络状态 无网络时
        if (!NetWorkUtils.networkIsAvailable(context)) {
            ToastUtils.show(context, "请接连网络");
        }
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//新的配置
                    .baseUrl(AppUtils.BASEIP)
                    .build();
        }
        return retrofit;

    }

    public static Retrofit getRetrofit(String url) {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//新的配置
                    .baseUrl(url)
                    .build();
        }
        return retrofit;

    }

    public static BqService creatBqService() {

        return getRetrofit(AppUtils.BASEIP).create(BqService.class);
    }
}

2.3在界面 activity里使用

重要的几点
回调在ui线程,
onNext ,onError,onCompleted
在使用订阅时,一定要注册订阅,添加
RxApiManager.get().add(“gwplanAreaCout”, subscription);
在onDestory里,要记得取消订阅;

    /** * 异步获取行政区列表 * * @param yr */
    private void getAreaCountAsync(String yr) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
        Date date = new Date(System.currentTimeMillis());
        String year = simpleDateFormat.format(date);
        if (Integer.parseInt(year) < Integer.parseInt(yr)) {
            ToastUtils.show(mContext, "请选择正确的年份!");
            return;
        }
        loadDialog();
        Subscription subscription = RetrofitManager.creatBqService().getAreaCountGwp(yr)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<BqAreaCountRespond>() {
                    @Override
                    public void onCompleted() {
                        LogUtils.e("sjt", "完成--completed");
                    }

                    @Override
                    public void onError(Throwable e) {
                        ToastUtils.show(mContext, "服务器开小差了");

                        listAreaCount.clear();
                        BqGetwAndOutletAreaCountAdapter simpleAdapter = new BqGetwAndOutletAreaCountAdapter(mContext, listAreaCount);
                        lvArea.setAdapter(simpleAdapter);
                        simpleAdapter.notifyDataSetChanged();
                        dismissLoadingDialog();
                    }

                    @Override
                    public void onNext(BqAreaCountRespond bqAreaCountRespond) {
                        dismissLoadingDialog();
                        int code = bqAreaCountRespond.getCode();
                        if (code == 1) {
                            listAreaCount = bqAreaCountRespond.getResult();
                            if (listAreaCount.size() != 0) {
                                tvwWaterSum.setText("全市(" + listAreaCount.get(0).getSum() + "万m³)");
                                listAreaCount.remove(0);
                            } else {
                                tvwWaterSum.setText("全市( 万m³)");
                                listAreaCount.clear();
                                ToastUtils.show(mContext, "无数据");
                            }
                        } else {
                            tvwWaterSum.setText("全市( 万m³)");
                            listAreaCount.clear();
                            LogUtils.e("sjt", "无数据");
                            ToastUtils.show(mContext, "无数据");
                        }
                        BqGetwAndOutletAreaCountAdapter simpleAdapter = new BqGetwAndOutletAreaCountAdapter(mContext, listAreaCount);
                        lvArea.setAdapter(simpleAdapter);
                        simpleAdapter.notifyDataSetChanged();
                    }
                });


        RxApiManager.get().add("gwplanAreaCout", subscription);
    }
    /** * 加载dialog */
    public void loadDialog(){
        loadingDialog.show();
    }

    /** * 取消dialog */
    public void dismissLoadingDialog(){
        loadingDialog.dismiss();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
// RxApiManager.get().cancel("getwaterplan");
// RxApiManager.get().cancel("gwplanAreaCout");
        RxApiManager.get().cancelAll();
    }

3.工程代码直接下载

我放到:csdn里资源下载了;
http://download.csdn.net/download/u014624241/9994368

上一篇:常用Andriod调试命令 下一篇:Linux Bash之select