网络访问框架经过了从使用最原始的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. activty栈管理

    题外话:我们有时在开发中,通常会有如下的需求:屏幕1-->屏幕2-->屏幕3-->屏幕4...,现在需要直接从屏幕4-->屏幕1,很多人会想到对activity进行管理得到对应 ...

  2. 如何在苹果手机上安装自制的AD证书

    写这篇博文的契机是有人已经实现了CRM在用自制证书部署IFD后,在手机安装上自制证书后即可登录官方移动端APP,因为之前很多人都尝试过只要是自制证书部署的IFD就无法使用官网手机APP,而本人实验下来 ...

  3. eclispe 导入android或者java项目出现中文乱码

    中文乱码经常是我们是一个比较麻烦的问题,对于这个问题,我想说一下我的解决思路. 1.到Windows- >Pereferences- >Genral->Workspace- > ...

  4. 剑指Offer——携程笔试题+知识点总结

    剑指Offer--携程笔试题+知识点总结 情景回顾 时间:2016.9.17 19:10-21:10 地点:山东省网络环境智能计算技术重点实验室 事件:携程笔试 总体来说,携程笔试内容与其它企业笔试题 ...

  5. 使用Spring+Junit4.4进行测试

    http://nottiansyf.iteye.com/blog/345819 使用Junit4.4测试 在类上的配置Annotation @RunWith(SpringJUnit4ClassRunn ...

  6. 使用LRU算法缓存图片,android 3.0

    在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了.在很多情况下 (例如使用 ListView, GridView 或者 ViewPager控件), 显示在屏幕上的图片以及即 ...

  7. Hibernate配置文件current_session_context_class的意思

    转自:http://shuaigg-babysky.iteye.com/blog/563423 此设置的作用如下: What does sessionFactory.getCurrentSession ...

  8. Android的搜索框SearchView的用法-android学习之旅(三十九)

    SearchView简介 SearchView是搜索框组件,他可以让用户搜索文字,然后显示.' 代码示例 这个示例加了衣蛾ListView用于为SearchView增加自动补全的功能. package ...

  9. springMVC源码分析--容器初始化(二)DispatcherServlet

    在上一篇博客springMVC源码分析--容器初始化(一)中我们介绍了spring web初始化IOC容器的过程,springMVC作为spring项目中的子项目,其可以和spring web容器很好 ...

  10. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...