Android网络请求框架之Retrofit实践

简介: <p><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px">网络访问框架经过了从使用最原始的AsyncTask构建简单的网络访问框架(甚至不能称为框架),后来使用开源的android-async-http库,再到使用google发布的volley库,一直不懈的寻找更好的解

网络访问框架经过了从使用最原始的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.   
  3. import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;  
  4.   
  5. import retrofit.Call;  
  6. import retrofit.http.GET;  
  7. import retrofit.http.Query;  
  8. import rx.Observable;  
  9.   

  10. public interface ApiService {  
  11.     @GET("service/getIpInfo.php")  
  12.     Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);  
  13. }  

3、定义接收数据的response

[java]  view plain  copy
  1. package com.micky.retrofitrxandroiddagger2.data.api.response;  
  2.   
  3.   
  4. import com.micky.retrofitrxandroiddagger2.data.api.model.IpInfo;  

  5. public class GetIpInfoResponse extends BaseResponse {  
  6.     public IpInfo data;  
  7. }  

4、请求数据并显示

[java]  view plain  copy
  1. package com.micky.retrofitrxandroiddagger2;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.design.widget.FloatingActionButton;  
  5. import android.support.v7.app.AppCompatActivity;  
  6. import android.support.v7.widget.Toolbar;  
  7. import android.view.View;  
  8. import android.view.Menu;  
  9. import android.view.MenuItem;  
  10. import android.widget.ProgressBar;  
  11. import android.widget.TextView;  
  12. import android.widget.Toast;  
  13.   
  14. import com.micky.retrofitrxandroiddagger2.common.utils.CrashHandler;  
  15. import com.micky.retrofitrxandroiddagger2.data.api.ApiService;  
  16. import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;  
  17.   
  18. import retrofit.Call;  
  19. import retrofit.Callback;  
  20. import retrofit.GsonConverterFactory;  
  21. import retrofit.Response;  
  22. import retrofit.Retrofit;  
  23. import retrofit.RxJavaCallAdapterFactory;  
  24. import rx.Subscriber;  
  25. import rx.android.schedulers.AndroidSchedulers;  
  26. import rx.functions.Action1;  
  27. import rx.schedulers.Schedulers;  
  28.   

  29. public class MainActivity extends AppCompatActivity {  
  30.   
  31.     private static final String ENDPOINT = "http://ip.taobao.com";  
  32.     private TextView mTvContent;  
  33.     private ProgressBar mProgressBar;  
  34.   
  35.     @Override  
  36.     protected void onCreate(Bundle savedInstanceState) {  
  37.         super.onCreate(savedInstanceState);  
  38.         setContentView(R.layout.activity_main);  
  39.         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);  
  40.         setSupportActionBar(toolbar);  
  41.         mTvContent = (TextView) findViewById(R.id.tv_content);  
  42.         mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);  
  43.   
  44.         FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);  
  45.         fab.setOnClickListener(new View.OnClickListener() {  
  46.             @Override  
  47.             public void onClick(View view) {  
  48.   
  49.                 Retrofit retrofit = new Retrofit.Builder()  
  50.                         .baseUrl(ENDPOINT)  
  51.                         .addConverterFactory(GsonConverterFactory.create())  
  52.                         .build();  
  53.                 ApiService apiService = retrofit.create(ApiService.class);  
  54.   
  55.                 mProgressBar.setVisibility(View.VISIBLE);  
  56.   
  57.                 Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");  
  58.                 call.enqueue(new Callback<GetIpInfoResponse>() {  
  59.                     @Override  
  60.                     public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {  
  61.                         mProgressBar.setVisibility(View.GONE);  
  62.                         GetIpInfoResponse getIpInfoResponse = response.body();  
  63.                         mTvContent.setText(getIpInfoResponse.data.country);  
  64.                     }  
  65.   
  66.                     @Override  
  67.                     public void onFailure(Throwable t) {  
  68.                         mProgressBar.setVisibility(View.GONE);  
  69.                         mTvContent.setText(t.getMessage());  
  70.                     }  
  71.                 });  
  72.             }  
  73.         });  
  74.     }  
  75.   
  76.     @Override  
  77.     public boolean onCreateOptionsMenu(Menu menu) {  
  78.         getMenuInflater().inflate(R.menu.menu_main, menu);  
  79.         return true;  
  80.     }  
  81.   
  82.     @Override  
  83.     public boolean onOptionsItemSelected(MenuItem item) {  
  84.         int id = item.getItemId();  
  85.         if (id == R.id.action_settings) {  
  86.             return true;  
  87.         }  
  88.   
  89.         return super.onOptionsItemSelected(item);  
  90.     }  
  91. }  





目录
打赏
0
0
0
1
43
分享
相关文章
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
242 20
算力流动的基石:边缘网络产品技术升级与实践探索
本文介绍了边缘网络产品技术的升级与实践探索,由阿里云专家分享。内容涵盖三大方面:1) 云编一体的混合组网方案,通过边缘节点实现广泛覆盖和高效连接;2) 基于边缘基础设施特点构建一网多态的边缘网络平台,提供多种业务形态的统一技术支持;3) 以软硬一体的边缘网关技术实现多类型业务网络平面统一,确保不同网络间的互联互通。边缘网络已实现全球覆盖、差异化连接及云边互联,支持即开即用和云网一体,满足各行业需求。
105 4
Android网络请求演变:从Retrofit到Flow的转变过程。
通过这个比喻,我们解释了 Android 网络请求从 Retrofit 到 Flow 的转变过程。这不仅是技术升级的体现,更是反映出开发者在面对并发编程问题时,持续探索和迭求更好地解决方案的精神。未来,还会有更多新的技术和工具出现,我们期待一同 witness 这一切的发展。
83 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
118 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
146 7
企业网络架构安全持续增强框架
企业网络架构安全评估与防护体系构建需采用分层防御、动态适应、主动治理的方法。通过系统化的实施框架,涵盖分层安全架构(核心、基础、边界、终端、治理层)和动态安全能力集成(持续监控、自动化响应、自适应防护)。关键步骤包括系统性风险评估、零信任网络重构、纵深防御技术选型及云原生安全集成。最终形成韧性安全架构,实现从被动防御到主动免疫的转变,确保安全投入与业务创新的平衡。
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
529 44
网络安全视角:从地域到账号的阿里云日志审计实践
网络安全视角:从地域到账号的阿里云日志审计实践
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等