Android Retrofit2使用教程-小白篇
来源:互联网 发布:360游戏优化器安卓版 编辑:程序博客网 时间:2024/05/16 08:05
如果你还不是很清楚retrofit是干嘛的,那我简单地用一句大白话来说明:它就是用来进行网络请求的。
Retrofit使用注解的方式将我们的HTTP请求转变为一个接口。
我个人崇尚“先学会基本用法,再学会高级用法,最后采取了解原理”,下面我会手把手教导你如何使用Retrofit2进行最简单的HTTP Get请求。
这里,我们使用一个手机归属地查询的API进行测试:
http://cx.shouji.360.cn/phonearea.php?number=13188888888
这是360提供的API,不需要开发者账号,API_KEY什么的,因此很方便。
使用百度的API测试工具测试结果如下:
可见该查询接口返回的是JSON格式,返回的两个键值分别是code和data。
一、新建项目,添加依赖
项目名为RetrofitDemo,为了防止大家疏忽,先在AndroidManifest.xml把网络权限添加上吧:
<uses-permission android:name="android.permission.INTERNET"/>A
然后在app->build.gradle的dependencies中添加如下依赖:
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0'
如何不知道retrofit2的最新版本,可以在file->Project Structure->modules(app)的dependencies标签页->选择‘+’号搜索添加依赖,如图:
输入retrofi搜索,注意选中retrofit2而不时retrofit
同样的步骤搜索converter-gson,注意要选retrofit2:converter-gson,不要选错了
可见这两个库的目前的最新版本是2.3.0
添加完毕后在app->build.gradle中的dependencies中自然会出现如下依赖:
创建实体类和Retrofit接口
我们使用Gson解析API查询返回的JSON格式,先根据API的返回结果创建实体类PhoneResult.class和PhoneData.class
PhoneResult.class:对应返回的Json对象,具有code和data两个键
public class PhoneResult { private int code; private PhoneData data; public void setData(PhoneData data) { this.data = data; } public void setCode(int code) { this.code = code; } public PhoneData getData() { return data; } public int getCode() { return code; }}
PhoneData.class:data键对应的Json对象,包含手机号所属省份、城市和供应商
public class PhoneData { private String province; private String city; private String sp; public void setSp(String sp) { this.sp = sp; } public void setProvince(String province) { this.province = province; } public void setCity(String city) { this.city = city; } public String getSp() { return sp; } public String getProvince() { return province; } public String getCity() { return city; }}
Retrofit使用接口和注解的形式来发起请求的,因此接下来定义请求接口
ApiService.java:注释应该写得比较详细了,就不细说了
public interface ApiService { /** * 请求API是:http://cx.shouji.360.cn/phonearea.php?number=13188888888 * 把资源定位的部分放在GET注解内,注意该部分不能以/作为开头 * Call<PhoneResult>指明请求返回的数据将装换为PhoneResult * getPhoneResult方法是发起请求时回调的方法,参数number对应API请求中的number参数 */ @GET("phonearea.php") Call<PhoneResult> getPhoneResult(@Query("number")String number);}
三、发起请求
MainActivity.class
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;public class MainActivity extends AppCompatActivity { //输入手机号 EditText et; //发起请求的按钮 Button btn; //显示请求结果 TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); et = (EditText) findViewById(R.id.et); tv = (TextView) findViewById(R.id.tv); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) //注意这里是请求的主机名,必须以/结尾 .baseUrl("http://cx.shouji.360.cn/") .build(); //生成ApiService的实例 ApiService apiService = retrofit.create(ApiService.class); Call<PhoneResult> call = apiService.getPhoneResult(et.getText().toString()); //发起网络请求 call.enqueue(new Callback<PhoneResult>() { @Override public void onResponse(Call<PhoneResult> call, Response<PhoneResult> response) { //请求成功 PhoneResult result = response.body(); PhoneData data = result.getData(); tv.setText(data.getProvince() + " " + data.getCity() + " " + data.getSp()); } @Override public void onFailure(Call<PhoneResult> call, Throwable t) { } }); } }); }}
运行结果如下:
好了,关于Retrofit2进行Get请求的小白教程就说到这了,以后有空再把Retrofit2更详尽的使用方法和原理补充完吧。
源码下载
- Android Retrofit2使用教程-小白篇
- Retrofit2+okhttp3 使用教程
- Retrofit2.0 使用教程
- retrofit2 使用教程 及 Android 网络架构搭建 (原创)
- Android Retrofit2 简单使用
- Android Retrofit2的使用
- Android Retrofit2使用
- Android 使用Retrofit2问题汇总
- android retrofit2使用全解
- retrofit2 RxJava在android中的使用
- Retrofit2.0在android项目中的使用
- Android学习笔记之Retrofit2的使用
- android retrofit2.0框架的使用介绍
- Retrofit2使用
- Retrofit2使用
- Retrofit2完全教程
- Retrofit2完全教程
- Retrofit2完全教程
- day10 tcp状态转换
- 深度学习 —— 逻辑回归
- postfix空壳邮件
- Search in Rotated Sorted Array
- c语言实现的简单学生管理系统
- Android Retrofit2使用教程-小白篇
- 1293: [SCOI2009]生日礼物
- Android之HttpClient和HttpUrlConnection
- *无向图求割点+点双连通分量——Tarjan
- 我要六一儿童节礼物!!DecoratorPattern----装饰模式
- 如何用SVG做出背景填充效果(avatar)
- java从入门到弃坑数据库0 0
- 直接插入排序
- React-JSX-常量定义与使用