网络访问框架经过了从使用最原始的AsyncTask构建简单的网络访问框架(甚至不能称为框架),后来使用开源的android-async-http库,再到使用google发布的volley库,一直不懈的寻找更好的解决方案,到现在也没找到,不过据行业所说,Retrofit算是行业比较牛逼的开源请求框架了吧,也算找 到了一些更好的方案,在这里做些记录,也做共享。

下面是我们常用的mvp模式的运行模型:

Retrofit:Square提供的开源产品,为Android平台的应用提供一个类型安全的REST客户端

[html] view
plain
 copy

  1. https://github.com/square/retrofit

RxAndroid:响应式编程框架RxJava针对Android平台的扩展。

[html] view
plain
 copy

  1. https://github.com/ReactiveX/RxAndroid
  2. https://github.com/ReactiveX/RxJava

Dagger2:依赖注入(或叫ioc,用过Spring的都知道这东东)框架,用于解耦的。

[html] view
plain
 copy

  1. https://github.com/google/dagger/

为了书写 方便,便于实践,我们用下面的地址作为服务器请求地址:http://ip.taobao.com/service/getIpInfo.php?ip=21.22.11.33

接下来我们开始新建一个项目;

1、通过配置gradle配置将Retrofit框架引入项目。

[java] view
plain
 copy

  1. compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
  2. compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

2、编写API服务代码

[java] view
plain
 copy

  1. package com.micky.retrofitrxandroiddagger2.data.api;
  2. import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;
  3. import retrofit.Call;
  4. import retrofit.http.GET;
  5. import retrofit.http.Query;
  6. import rx.Observable;
  7. public interface ApiService {
  8. @GET("service/getIpInfo.php")
  9. Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
  10. }

3、定义接收数据的response

[java] view
plain
 copy

  1. package com.micky.retrofitrxandroiddagger2.data.api.response;
  2. import com.micky.retrofitrxandroiddagger2.data.api.model.IpInfo;
  3. public class GetIpInfoResponse extends BaseResponse {
  4. public IpInfo data;
  5. }

4、请求数据并显示

[java] view
plain
 copy

  1. package com.micky.retrofitrxandroiddagger2;
  2. import android.os.Bundle;
  3. import android.support.design.widget.FloatingActionButton;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.support.v7.widget.Toolbar;
  6. import android.view.View;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.widget.ProgressBar;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. import com.micky.retrofitrxandroiddagger2.common.utils.CrashHandler;
  13. import com.micky.retrofitrxandroiddagger2.data.api.ApiService;
  14. import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;
  15. import retrofit.Call;
  16. import retrofit.Callback;
  17. import retrofit.GsonConverterFactory;
  18. import retrofit.Response;
  19. import retrofit.Retrofit;
  20. import retrofit.RxJavaCallAdapterFactory;
  21. import rx.Subscriber;
  22. import rx.android.schedulers.AndroidSchedulers;
  23. import rx.functions.Action1;
  24. import rx.schedulers.Schedulers;
  25. public class MainActivity extends AppCompatActivity {
  26. private static final String ENDPOINT = "http://ip.taobao.com";
  27. private TextView mTvContent;
  28. private ProgressBar mProgressBar;
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.activity_main);
  33. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  34. setSupportActionBar(toolbar);
  35. mTvContent = (TextView) findViewById(R.id.tv_content);
  36. mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
  37. FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
  38. fab.setOnClickListener(new View.OnClickListener() {
  39. @Override
  40. public void onClick(View view) {
  41. Retrofit retrofit = new Retrofit.Builder()
  42. .baseUrl(ENDPOINT)
  43. .addConverterFactory(GsonConverterFactory.create())
  44. .build();
  45. ApiService apiService = retrofit.create(ApiService.class);
  46. mProgressBar.setVisibility(View.VISIBLE);
  47. Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");
  48. call.enqueue(new Callback<GetIpInfoResponse>() {
  49. @Override
  50. public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
  51. mProgressBar.setVisibility(View.GONE);
  52. GetIpInfoResponse getIpInfoResponse = response.body();
  53. mTvContent.setText(getIpInfoResponse.data.country);
  54. }
  55. @Override
  56. public void onFailure(Throwable t) {
  57. mProgressBar.setVisibility(View.GONE);
  58. mTvContent.setText(t.getMessage());
  59. }
  60. });
  61. }
  62. });
  63. }
  64. @Override
  65. public boolean onCreateOptionsMenu(Menu menu) {
  66. getMenuInflater().inflate(R.menu.menu_main, menu);
  67. return true;
  68. }
  69. @Override
  70. public boolean onOptionsItemSelected(MenuItem item) {
  71. int id = item.getItemId();
  72. if (id == R.id.action_settings) {
  73. return true;
  74. }
  75. return super.onOptionsItemSelected(item);
  76. }
  77. }


Android网络请求框架之Retrofit实践的更多相关文章

  1. Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

    最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所 ...

  2. Android 网络请求框架Retrofit

    Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp ...

  3. Android网络请求框架

    本篇主要介绍一下Android中经常用到的网络请求框架: 客户端网络请求,就是客户端发起网络请求,经过网络框架的特殊处理,让后将请求发送的服务器,服务器根据 请求的参数,返回客户端需要的数据,经过网络 ...

  4. Android 网络请求框架android-async-http问题

    今天通过接口请求服务器的一些app数据,发现一个很奇怪的问题,请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一 ...

  5. Android常用网络请求框架Volley Retrofit (okHttp)

    Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient.在 Android 5.0 的时候 Google 就不推荐使用 HttpClient ...

  6. Android 网络请求框架

    1.okHttp 特点 简单.灵活.无连接.无状态 优势: 谷歌官方API在6.0之后在Android SDK中移除了HttpClient,然后他火了起来, 他支持SPDY(谷歌开发的基于TCP应用层 ...

  7. Java/Android 网络请求框架/库

    Android 图片缓存框架  最上面的最优先 com.facebook.fresco:fresco:0.12.0                7.26.2016最新 Universal-Image ...

  8. android开发学习--网络请求框架RxJava+Retrofit

    看了好多的博客,终于弄清楚了Rxjava和Retrofit,给大家推荐几个不错的文章: https://gank.io/post/56e80c2c677659311bed9841 这个文章是只用Ret ...

  9. RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架

    新建工程集成, 一.工具集成(2017-4-27) 首先第一步集成retrofit retrofit 的 git 网站: https://github.com/square/retrofit 在git ...

随机推荐

  1. Struts1基础、使用Struts实现登录、使用Struts HTML标签简化开发

    Struts 1基础 为什么重拾Struts 1 曾经是最主流的MVC框架 市场份额依然很大 很多遗留系统中依旧使用 维护和升级都需要熟悉Struts 1 与Struts 2相比 编码.配置繁琐 侵入 ...

  2. 全文检索Lucene (2)

    接着全文检索Lucene (1) . 下面我们来深入的研究一下,如何使用Lucene! 从全文检索Lucene (1)中我们可以看出,Lucene就好比一个双向的工作流,一方面是对索引库的维护,另一方 ...

  3. Volley的基本使用

    Volley的基本使用 导入jar包 导入成功 源码 GET请求下载地址:http://download.csdn.net/detail/q4878802/9053969 POST请求下载地址:htt ...

  4. Android必知必会-Fragment监听返回键事件

    如果移动端访问不佳,请尝试 Github版<–点击左侧 背景 项目要求用户注册成功后进入修改个人资料的页面,且不允许返回到上一个页面,资料修改完成后结束当前页面,进入APP主页. 由于是使用多个 ...

  5. Android四大组件之一Service介绍-android学习之旅(十二)

    基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...

  6. Hibernate初体验及简单错误排除

    Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了.下面是我对Hibernate简单使用的一个小小的总结.与君(主要是刚入门的)共勉吧! 创建的顺序 创建Hibernate ...

  7. SSH深度历险(七) 剖析SSH核心原理(一)

    接触SSH有一段时间了,但是对于其原理,之前说不出来莫模模糊糊(不能使用自己的语言描述出来的就是没有掌握),在视频和GXPT学习,主要是实现了代码,一些原理性的内容还是欠缺的,这几天我自己也一直在反问 ...

  8. python上下文管理器ContextLib及with语句

    http://blog.csdn.net/pipisorry/article/details/50444736 with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能 ...

  9. Android进阶(二十七)Android原生扰人烦的布局

    Android原生扰人烦的布局 在开发Android应用时,UI布局是一件令人烦恼的事情.下面主要讲解一下Android中的界面布局. 一.线性布局(LinearLayout) 线性布局分为: (1) ...

  10. Android 面向协议编程 体会优雅编程之旅

    Android中面向协议编程的深入浅出 http://blog.csdn.net/sk719887916/article/details skay编写 说起协议,现实生活中大家第一感觉会想到规则或者约 ...