Android Retrofit 2.0框架 GET和POST的实现方式(配合RxJava)
2016-01-29 17:24
253 查看
Android Retrofit 2.0框架 GET和POST的实现方式(配合RxJava)
简单说两句,该框架是okhttp再次封装的实现,性能挺高的哦。不罗嗦了,直接上代码1.需要的类库:
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0'
2.GET形式:
@GET("/weather") WeatherData getWeather(@Query("APPID") String AppID,@Query("q") String place, @Query("units") String units);
3.POST形式:
@FormUrlEncoded @POST("/cuslogin") Observable<Chni_User> login (@Field("data") String data);
4.Retrofit实现
private static final Retrofit sRetrofit = new Retrofit .Builder() .baseUrl(ENDPOINT) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 使用RxJava作为回调适配器 .build(); private static final ApiManagerService apiManager = sRetrofit.create(ApiManagerService.class);
5.以下是代码的实现
private interface ApiManagerService { @GET("/weather") WeatherData getWeather(@Query("APPID") String AppID,@Query("q") String place, @Query("units") String units); /** * retrofit 支持 rxjava 整合 * 这种方法适用于新接口 */ @GET("/weather") Observable<WeatherData> getWeatherData(@Query("APPID") String AppID,@Query("q") String place, @Query("units") String units); @FormUrlEncoded @POST("/cuslogin") Observable<Chni_User> login (@Field("data") String data); }
/** * 将服务接口返回的数据,封装成{@link rx.Observable} * 这种写法适用于将旧代码封装 * @param city * @return */ public static Observable<WeatherData> getWeatherData(final String city) { return Observable.create(new Observable.OnSubscribe<WeatherData>() { @Override public void call(Subscriber<? super WeatherData> subscriber) { //订阅者回调 onNext 和 onCompleted subscriber.onNext(apiManager.getWeather("ee9c42978f2e9be685994bf32b87cdc0", city, "metric")); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()); } public static Observable<WeatherData> getWeatherData1(final String city) { return apiManager.getWeatherData("ee9c42978f2e9be685994bf32b87cdc0", city, "metric"); }
public static Observable<Chni_User> login( final String data){// return apiManager.getMyProduces(pageNumber,"10"); return apiManager.login(data); }调用:
String t = SystemAttrUtlis.getPostTimeNow(); String s = "0010000app"; String ko = "0000"; String time = t; String token = MD5s(t + s); String data = ""; Map<String, String> params = new HashMap<String, String>(); params.put("username", "lidong"); params.put("password", "325106"); params.put("orgid", "0010000"); CkeckServerTokenUtils.handleServerCheck(params); final Map<String, String> params1 = new HashMap<String, String>(); JSONObject jsonObject1 = new JSONObject(params); data=jsonObject1.toString(); Log.v("zgy", data); ApiManager.login(data).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Chni_User>() { @Override public void call(Chni_User ss) {// Log.d(LOG_TAG, weatherData.toString()); ((TextView) findViewById(R.id.tv_demo)).setText(ss.getCustomerid()); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { Log.e(LOG_TAG, throwable.getMessage(), throwable); } }); }
ApiManager.getWeatherData1(CITIES[0]).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<WeatherData>() { @Override public void call(WeatherData weatherData) { Log.d(LOG_TAG, weatherData.toString()); ((TextView) findViewById(R.id.tv_demo1)).setText(weatherData.toString()); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { Log.e(LOG_TAG, throwable.getMessage(), throwable); } });就这些了吧。有问题大家提出来。
相关文章推荐
- [Android]日志分类(Android Studio)
- Android 过滤 html标签
- Android Studio关于SVN的相关配置简介
- Android 开启百度客户端的导航系统
- 错误编码 = 10022 错误消息 = SDK 组件 Qupaisdk 启动出错,错误消息为 [Qupaisdk], the android stack error message is Fail to start the plugin, which is caused by No implem
- Volley===Volley框架的基本使用方法
- android sqlite 增删查 demo
- android屏幕适配之dimens适配
- android view简单水平垂直移动的api运用
- Android JNI 第一个例子
- Android源码剖析之----系统服务的获取
- Android studio导入github上的工程以及如何应用到自己的工程上
- Android 系统启动流程简介
- Android中View的加载过程
- Android Retrofit 2.0框架上传图片解决方案(一张与多张的处理)
- Android IPC机制(四)用ContentProvider进行进程间通信
- 深入理解:Android 编译系统
- 简述移动中Android开发平台生态系统成功的因素
- Android中Shape、selector在xml中的使用、切换按钮的背景图案
- Android Studio 导入和关联SVN项目