首先使用SpringBoot创建一个简单的SpringMVC工程。

@RestController
public class RetrofitController {@RequestMapping("/users/{user}")public User getUser(@PathVariable("user") String u){System.out.println("user = " + u);User user = new User();user.setUsername("test");user.setEmail(("test@qq.com"));return user;}
}
public class User {private String username;private String email;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

服务端运行在8000端口。

通过Android Studio创建一个Android工程。

在AndroidManifest.xml添加

<uses-permission android:name="android.permission.INTERNET"/>

在build.gradle添加发下代码,使用Retrofit2.2.0, RxJava2.0.7, RxAndroid2.0, 1, gson 2.8.0

compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
//compile 'com.squareup.retrofit2:converter-jackson:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.google.code.gson:gson:2.8.0'

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.7'

定义UserService

public interface UserService {@GET("/users/{user}")Flowable<User> getUser(@Path("user") String user);
}

测试代码

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 只是例子,没有采用注解方案//后续可以添加token处理, cache处理, 请求拦截等功能tvResponse = (TextView) findViewById(R.id.tvResponse);btnRequest = (Button) findViewById(R.id.btnTest);btnRequest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.d(TAG, "test");Retrofit retrofit = new Retrofit.Builder().baseUrl("http://10.0.0.16:8000/").addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();UserService userService = retrofit.create(UserService.class);userService.getUser("chenhaifeng2016").subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<User>() {@Overridepublic void onSubscribe(Subscription s) {s.request(Long.MAX_VALUE);}@Overridepublic void onNext(User user) {Log.d(TAG, "成功");Log.d(TAG, "response=" + user.getUsername());}@Overridepublic void onError(Throwable t) {Log.d(TAG, "出错");}@Overridepublic void onComplete() {Log.d(TAG, "完成");}});}});

运行效果

03-16 21:14:15.283 312-312/cssweb.com.retrofit2demo D/MainActivity: test
03-16 21:14:15.313 312-312/cssweb.com.retrofit2demo D/MainActivity: 成功
03-16 21:14:15.313 312-312/cssweb.com.retrofit2demo D/MainActivity: response=test
03-16 21:14:15.313 312-312/cssweb.com.retrofit2demo D/MainActivity: 完成

完整工程源代码

https://github.com/chenhaifeng2016/Retrofit2Demo

Android使用Retrofit2.0和RxJava2.0处理网络请求相关推荐

  1. 一款基于RxJava2+Retrofit2实现简单易用的网络请求框架

    本库是一款基于RxJava2+Retrofit2实现简单易用的网络请求框架,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置, ...

  2. Rxjava Disposable解除订阅(Retrofit2+Rxjava2主动取消网络请求)

    Disposable类 dispose():主动解除订阅(如果使用Retrofit2+Rxjava2,调用dispose会主动取消网络请求,在本文的后半部分) isDisposed():查询是否解除订 ...

  3. Android 微博实时热点获取(GET)网络请求

    Android 微博实时热点获取(GET)网络请求 首先在xml文件上界面布局 这边采用LinearLayour布局,首先添加TextView控件来显示标题,第二采用RecyclerView列表控件来 ...

  4. android上传头像 sockettimeoutexception,Kotlin - Retrofit2和Rxjava2封装的网络请求类(含图片上传)...

    阅读建议:本文适合熟悉Retrofit与Rxjava2的同学阅读,其中也包含一丢丢的RxLifecycle,文中不包含这两个库的使用说明.不熟悉RxJava的同学,建议去这里了解,里面包含3篇文章,均 ...

  5. Android中使用logger打印完整的okhttp网络请求和响应的所有相关信息(请求行、请求头、请求体、响应行、响应行、响应头、响应体)

    如果你的项目中的网络请求库是Retrofit的话,他的底层封装的是OkHttp,通常调试网络接口时都会将网络请求和响应相关数据通过日志的形式打印出来.OkHttp也提供了一个网络拦截器okhttp-l ...

  6. Android中使用Volley开源库进行Http网络请求(GET方式)

    在之前的Http网络请求中,我们一般使用输入流以及缓冲区的方式进行访问,然后从服务器获取返回的数据.代码行数近20行,而且网络操作是放在Thread线程中进行的,对于Java或者Android的线程还 ...

  7. 如何使用Android Studio发送一个简单的GET/POST网络请求

    Android Studio发送简单的GET/POST网络请求 阅读文章需知 前提准备 权限添加 启动子线程,发送网络请求 POST请求如何添加参数? 后文必读 能点赞投币一键三连嘛? 阅读文章需知 ...

  8. Android每周一个学习计划——RxJava2 0的学习使用

    序言:蜗壳已经退役一年多了,但是还是抵不住蜗壳在NBA界的影响力,最近NBA流行向"蜗壳挑战",事情起源于蜗壳给IT和北境之王设定了新赛季的挑战,然后众多球星也纷纷向蜗壳讨要挑战. ...

  9. Xcode7.0 更新完后,网络请求报错

    最近刚更新了Xcode7.0,更新完工程编译报错,应该在info.plist文件中添加两个key值.NSAppTransportSecurity  NSAllowsArbitraryLoads NSA ...

最新文章

  1. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置
  2. 将普通路由器设置成微信连WiFi路由器的方法
  3. mysql utf8mb4 java_mysql中utf8和utf8mb4区别
  4. dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分
  5. 使用lodash防抖_什么,lodash 的防抖失效了?
  6. Extjs弹窗-简单文本编辑框-Ext.Msg.show
  7. 从零开始:iOS(三)
  8. 03 Java 修饰符
  9. 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]
  10. linux 将当前时间往后调整2分钟_【转】修改LINUX时间
  11. Ubuntu 网速显示,ssh配置
  12. DevOps使用教程 华为云(7)团队绩效评估 工时统计
  13. android 模拟点击menu键,android编程之menu按键功能实现方法
  14. 初中数学定理公式汇编
  15. 单片机I/O常用的驱动与隔离电路设计
  16. 灵活部署的数据中心Pod已初见端倪
  17. 基于sklearn随机森林算法对鸢尾花数据进行分类
  18. ArcEngine代码 mdb操作以及存图片
  19. Revit二次实现多版本动态引用RevitAPI.dll、RevitAPIUI.dll、AdWindows.dll、UIFramework.dll
  20. 苹果5G芯片研发失败,冲上热搜

热门文章

  1. == 捕获对象时的模式切换 ==
  2. 云主机初体验(盛大云和阿里云)
  3. linux-dns的安装
  4. 参加Tech.Ed 2006北京行
  5. POJ - 2914 Minimum Cut(全局最小割-Stoer_Wagner)
  6. HDU - 6610 Game(带修莫队)
  7. python与或非位运算_python位运算
  8. linux注释内容,Linux 中snmptrapd的内容有大虾能帮我注释下吗?谢谢了
  9. HDU3208(区间指数和)
  10. 棋牌游戏服务器架构: 总体设计