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. }  





目录
相关文章
|
28天前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
3月前
|
缓存 负载均衡 应用服务中间件
高性能网络编程技术 Nginx 的概念与实践
Nginx 是一款高性能、轻量级的Web服务器和反向代理服务器,它在网络编程技术领域中被广泛应用。本文将详细介绍Nginx的概念和实践,包括其核心原理、功能特点、优势和应用场景等方面。同时,还将深入探讨如何使用Nginx进行高性能网络编程,结合实际案例进行分析。
|
3月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
23 1
|
1天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
3天前
|
监控 安全 网络安全
云端防御:云计算环境中的网络安全策略与实践
【4月更文挑战第15天】 在数字化转型的时代,云计算已成为企业运营不可或缺的技术支撑。然而,随着云服务模式的广泛采纳,网络安全挑战亦随之而来。本文深入探讨了云计算环境下的安全威胁,分析了云服务模型对安全策略的影响,并提出了一系列创新的网络安全防护措施。通过研究最新的加密技术、访问控制机制和持续监控方法,文章旨在为企业提供一个综合性的网络安全框架,以确保其云基础设施和数据的安全性和完整性。
20 8
|
9天前
|
安全 网络安全 网络虚拟化
虚拟网络设备与网络安全:深入分析与实践应用
在数字化时代📲,网络安全🔒成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁🔥,传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备🖧,作为网络架构中的重要组成部分,通过提供灵活的配置和强大的隔离能力🛡️,为网络安全提供了新的保障。本文将从多个维度深入分析虚拟网络设备是如何保障网络安全的,以及它们的实际意义和应用场景。
|
17天前
|
安全 算法 网络安全
网络安全与信息安全:防范之道与实践策略
在数字化时代,网络安全与信息安全已成为全球关注的焦点。本文将深入探讨网络安全漏洞的成因、加密技术的最新发展以及提升安全意识的重要性。通过对这些关键领域的分析,我们旨在为读者提供一套综合性的策略,以增强个人和组织在网络空间的防护能力。
|
存储 设计模式 网络协议
Netty网络框架(一)
Netty网络框架
29 1
|
25天前
|
监控 安全 网络安全
云计算环境下的网络安全新策略与实践
在数字化时代,云计算为企业提供了弹性、可扩展的资源管理平台,但同时也带来了复杂的安全挑战。本文聚焦于云服务中的网络安全和信息保护问题,首先分析了云计算环境中存在的安全威胁和风险因素,然后详细探讨了当前最新的安全技术和策略,包括身份认证、数据加密、入侵检测系统以及安全运营中心(SOC)等。最后,文章提出了一套综合的安全框架,旨在帮助组织在享受云计算便利的同时,确保其数据和资源的安全性和完整性。
|
26天前
|
运维 安全 网络安全
Python灰帽子网络安全实践
旨在降低网络防范黑客的入门门槛,适合所有中小企业和传统企业。罗列常见的攻击手段和防范方法,让网站管理人员都具备基本的保护能力。Python 编程的简单实现,让网络运维变得更简单。各种黑客工具的理论和原理解剖,让人知其然更知道防范于未来。涉及互联网和局域网,让企业级网管工作更轻松。涵盖Linux&Windows 的知识点。
14 1