Android中retrofit网络请求框架使用
来源:互联网 发布:视频抠像软件 编辑:程序博客网 时间:2024/05/31 13:16
Retrofit 是 Square 公司出品的 HTTP 请求库, 同时是 Square 是最早开源项目之一, Retrofit 是目前 Android 最流行的 Http Client 库之一, 目前版本是 Retrofit2.0 Beta4, 越来越多 Android 开发者开始使用这个请求库了
1、配置环境
在build.gradle文件中导入依赖包,一个为retrofit包,还有一个为Json转换包
compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:converter-gson:2.1.0'在Android Studio中加入Retrofit包后,系统会自动加入OkHttp包进入项目,Retrofit推出的2.0版本之后,直接强制用户使用OkHttp做网络请求,所以可以说Retorfit和OkHttp已经是一对兄弟关系。
在AndroidManifest.xml文件中加入网络请求权限
<uses-permission android:name="android.permission.INTERNET" />2、定义网络请求接口
例子详细地址:
http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.4.255.255
public interface ApiService { //获取详情数据 @GET("iplookup/iplookup.php?") Call<LocationBean> getLocationData(@Query("format") String format, @Query("ip") String ip); @POST("iplookup/iplookup.php?") Call<LocationBean> postLocationData(@Query("format") String format, @Query("ip") String ip);}
@GET为Http中的get请求,后面请求的参数表示请求的路径但是不包含域名。
@Post为Http中的post请求,参数与get请求相同,在Post请求上添加@FormUrlEncoded注解,表示以表单的方式来提交参数。
@Query后面表示参数,前面是键后面参数为值。
3、定义实体类public class LocationBean { /** * ret : 1 * start : -1 * end : -1 * country : 中国 * province : 江苏 * city : 苏州 * district : * isp : * type : * desc : */ private int ret; private int start; private int end; private String country; private String province; private String city; private String district; private String isp; private String type; private String desc; public int getRet() { return ret; } public void setRet(int ret) { this.ret = ret; } ......}可以通过GsonFormat转换器将json数据生成实体类,GsonFormat是Android Studio中的插件,效果如下:
配置方法:
Android studio File->Settings..->Plugins–>Browse repositores..搜索GsonFormat
安装插件,重启android studio
Retrofit retrofit = new Retrofit.Builder() //域名 .baseUrl("http://int.dpool.sina.com.cn/") //增加返回值为Gson的支持(以实体类返回) .addConverterFactory(GsonConverterFactory.create()) .build();baseUrl()后面的参数为请求域名,建议写一个全局变量,方便后期更改
addConverterFactory(GsonConverterFactory.create())的意思是构建一个返回值支持,后面可通过Call接收到实体类返回值。
4、网络请求
ApiService apiService = retrofit.create(ApiService.class);//这里采用的是Java的动态代理模式Call<LocationBean> call = apiService.postLocationData("json", "218.4.255.255");//传入我们请求的键值对的值call.enqueue(new Callback<LocationBean>() { @Override public void onResponse(Call<LocationBean> call, Response<LocationBean> response) { //服务器响应 LocationBean bean = response.body(); Log.e("TAG", "body.getMessage()===" + bean.getCity()); content.setText(bean.getCity()); } @Override public void onFailure(Call<LocationBean> call, Throwable t) { //请求失败 }});使用retrofit方法请求网络,并得到返回值的实体类,json解析过程也帮我们完成了,并且onResponse和onFailure方法是在UI线程,可以通过回调直接更新UI界面。
5、示例
public class MainActivity extends Activity { private Button btn; private TextView content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); content = (TextView) findViewById(R.id.content); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { RetrofitTest(); } }); } private void RetrofitTest() { Retrofit retrofit = new Retrofit.Builder() //域名 .baseUrl("http://int.dpool.sina.com.cn/") //增加返回值为Gson的支持(以实体类返回) .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class);//这里采用的是Java的动态代理模式 Call<LocationBean> call = apiService.postLocationData("json", "218.4.255.255");//传入我们请求的键值对的值 call.enqueue(new Callback<LocationBean>() { @Override public void onResponse(Call<LocationBean> call, Response<LocationBean> response) { //服务器响应 LocationBean bean = response.body(); Log.e("TAG", "body.getMessage()===" + bean.getCity()); content.setText(bean.getCity()); } @Override public void onFailure(Call<LocationBean> call, Throwable t) { //请求失败 } }); }}XML:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮" /> <TextView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
1 0
- Android中retrofit网络请求框架使用
- Android网络请求框架Retrofit使用详解
- [Android 知识点] 网络请求框架Retrofit使用
- 在android中使用Retrofit网络框架
- Android 网络请求:Retrofit 使用
- Android 网络请求:Retrofit 使用
- Retrofit网络请求框架使用简析——Android网络请求框架(四)
- Android网络请求框架之Retrofit(一)
- Android网络请求框架之Retrofit(二)
- Android网络请求框架之Retrofit(三)
- Android高效网络请求Retrofit框架
- Android网络请求框架之Retrofit实践
- Android 网络请求框架之Rxjava+Retrofit
- Android 网络请求框架之Rxjava+Retrofit
- Android 网络请求框架之Rxjava+Retrofit
- Android 网络请求框架之Rxjava+Retrofit
- Android网络请求框架:Retrofit入门
- Retrofit 2.0 Android网络请求框架
- 判断素数
- nginx做静态代理时css加载不出问题解决
- 不知道说点啥
- 我为什么看好在线视频行业
- 最小生成树—Prim算法
- Android中retrofit网络请求框架使用
- editText代码中强制获取焦点
- 简明 Vim 练级攻略
- java题: 设有n个正整数,将它们联接成一排,组成一个最大的多位整数。例如:N=3时,3个整数13、312、343联成的最大整数为:34331213;
- Elevator
- AndroidStudio中使用AndroidAnnotation的简单介绍
- struts 的解耦和方式
- 文件I/O实践(3) --文件共享与fcntl
- 【Qzone】这个比较有趣 总结一下笔记