一、retrofit推荐博客
1、这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)
2、Android:手把手带你深入剖析 Retrofit 2.0 源码
3、安卓Retrofit的基本操作
4、关于okhttp3网络框架的onfailure错误
二、具体交互实现(以实现注册功能为例)
- 步骤一
创建JavaBean类,根据服务端所给的Gson格式,例如:
{
"userName": "",
"userPhoneNumber": "",
"userPassword": ""
}
创建对应的Bean类,这个类是用于向服务端传递数据,一般命名:功能名+Request
public class RegisterRequest {
/** alt + S
* userName :
* userPhoneNumber :
* userPassword :
*/
private String userName;
private String userPhoneNumber;
private String userPassword;
......
}
- 步骤二
为交互提供响应的接口
public interface IApi {
//注册接口
@Headers("Content-Type:application/json")//只有你要了json就是这个格式,死规定
@POST("/user/register")//跟服务器有关
Call<ResponseBody> register(@Body RegisterRequest body);
//死规定 自己命名 接口名 Bean类 自己命名
}
- 步骤三
创建Retrofit的对象
RegisterRequest registerRequest = new RegisterRequest(username,telephone,password);
Retrofit retrofit = new Retrofit.Builder().baseUrl("http://liuying.free.idcfengye.com/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build();
- 步骤四
创建 网络请求接口 的实例
IApi iApi = retrofit.create(IApi.class);
- 步骤五
返回服务端发回的内容
根据Gson格式:
{
"code": 200,
"message": "成功",
"data": "2021-02-11T10:22:19.226+00:00"
}
创建对应的Bean类,这个类是用于存储服务端传递的数据,一般命名:功能名+Result
public class RegisterResult {
/**
* code : 200
* message : 成功
* data : 2021-02-11T10:22:19.226+00:00
*/
private Integer code;
private String message;
private String data;
}
- 步骤六
发送网络请求
Call<ResponseBody> call = iApi.register(registerRequest); //对 发送请求 进行封装(设置需要翻译的内容)
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//说明他连上网了 只要网络没问题都能连上
//response一般返回的是服务端json格式的数据
if(response.code() == HttpURLConnection.HTTP_OK){
//服务端 返回404. 常识中的连上 不是200说明对接方法有问题
Gson gson = new Gson();
RegisterResult registerResult;
try {
String temp = response.body().string();
registerResult = gson.fromJson(temp, RegisterResult.class); //服务端主动发送的东西
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(RegisterActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
}else{
Toast.makeText(RegisterActivity.this,"注册失败",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Toast.makeText(RegisterActivity.this,"注册失败",Toast.LENGTH_SHORT).show();
}
});
- 步骤七
解决非安全连接设置
首先,在res/xml下建立我们自己的network security config文件,名字任意,可以叫做network_security_config.xml。
然后在里面设置
<network-security-config>
<!--默认允许所有网址使用非安全连接-->
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
最后在AndroidManifest.xml里加一段代码
<application
android:networkSecurityConfig="@xml/network_security_config"
android:allowBackup="true"
...........
</application>