App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作
在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit根据用户的需求对结果进行解析
以下图片来自网络:
原创目录:
get方式:
Post方式:
依赖的添加:
建立获取网络返回数据的实体类
描述网络请求的接口
发起请求的操作:
本文仅仅涉及Retrofit2这个网络请求框架在Java和Kotlin环境下的使用,暂时不与RxJava混合使用,详细内容稍后奉上
参考博文:http://blog.csdn.net/carson_ho/article/details/73732076
GitHub地址:https://github.com/yangtianfu2018/Retrofit2Project
核心代码:
接口类:
GET接口:
packagecom.ytf.ppg.retrofit2application.retrofit;
importcom.ytf.ppg.retrofit2application.bean.Translation;
importretrofit2.Call;
importretrofit2.http.GET;
/**
* Created by ppg on 2018/3/9.
*/
public interfaceGetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")//传BaseURL后的相对path
CallgetCall();
// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里
// 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略
// getCall()是接受网络请求数据的方法
}
GET方式请求:
POST类接口:
packagecom.ytf.ppg.retrofit2application.retrofit;
importcom.ytf.ppg.retrofit2application.bean.TranslationPost;
importjava.util.ResourceBundle;
importretrofit2.Call;
importretrofit2.http.Field;
importretrofit2.http.FormUrlEncoded;
importretrofit2.http.POST;
/**
* Created by ppg on 2018/3/9.
* 描述网络请求的接口
*/
public interfacePostRequest_Interface {
@POST("translate?doctype=json&jsonversion=&type=&keyfrom=&model=&mid=&imei=&vendor=&screen=&ssid=&network=&abtest=")
@FormUrlEncoded
CallgetCall(@Field("i") String target);
}
POST方式:
/**
* post方式请求
*/
private funrequestByPost() {
//步骤4:创建Retrofit对象
valretrofit = Retrofit.Builder()
.baseUrl("http://fanyi.youdao.com/")// 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create())//设置使用Gson解析(记得加入依赖)
.build()
// 步骤5:创建 网络请求接口 的实例
valrequest = retrofit.create(PostRequest_Interface::class.java)
//对 发送请求 进行封装(设置需要翻译的内容)
valcall = request.getCall("I love you")
//步骤6:发送网络请求(异步)
call.enqueue(object: Callback {
//请求成功时回调
override funonResponse(call: Call,response: Response) {
// 步骤7:处理返回的数据结果:输出翻译的内容
System.out.println(response.body().getTranslateResult().get().get().getTgt())
}
//请求失败时回调
override funonFailure(call: Call,throwable: Throwable) {
println("请求失败")
println(throwable.message)
}
})
}
领取专属 10元无门槛券
私享最新 技术干货