参考博文:http://blog.csdn.net/carson_ho/article/details/73732076
GitHub地址:https://github.com/yangtianfu2018/Retrofit2Project
代码实现步骤:
依赖的添加:
网络请求权限,不再多说,相关依赖如下:
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
// Retrofit库
implementation 'com.squareup.okhttp3:okhttp:3.1.2'
// Okhttp库
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
// 数据解析器
建立获取网络返回数据的实体类
代码相当简单,不贴了,如果使用kotlin的方式建立实体类也是可以的,AndroidStrudio3.0以上版本可以自动转换
描述网络请求的接口
get方式:
package com.ytf.ppg.retrofit2application.retrofit;
import com.ytf.ppg.retrofit2application.bean.Translation;
import retrofit2.Call;
import retrofit2.http.GET;
/**
* Created by ppg on 2018/3/9.
*/
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")//传BaseURL后的相对path
Call<Translation> getCall();
// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里
// 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略
// getCall()是接受网络请求数据的方法
}
Post方式:
package com.ytf.ppg.retrofit2application.retrofit;
import com.ytf.ppg.retrofit2application.bean.TranslationPost;
import java.util.ResourceBundle;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
/**
* Created by ppg on 2018/3/9.
* 描述网络请求的接口
*/
public interface PostRequest_Interface {
@POST("translate?doctype=json&jsonversion=&type=&keyfrom=&model=&mid=&imei=&vendor=&screen=&ssid=&network=&abtest=")
@FormUrlEncoded
Call<TranslationPost> getCall(@Field("i") String target);
}
发起请求的操作:
package com.ytf.ppg.retrofit2application.acvitity
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.ytf.ppg.retrofit2application.R
import com.ytf.ppg.retrofit2application.bean.Translation
import com.ytf.ppg.retrofit2application.bean.TranslationPost
import com.ytf.ppg.retrofit2application.retrofit.GetRequest_Interface
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import com.ytf.ppg.retrofit2application.retrofit.PostRequest_Interface
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
requestByGet()
requestByPost()
}
/**
* get方式请求
*/
private fun requestByGet() {
//步骤4:创建Retrofit对象
val retrofit = Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build()
// 步骤5:创建 网络请求接口 的实例
val request = retrofit.create(GetRequest_Interface::class.java)
//对 发送请求 进行封装
val call = request.call
//步骤6:发送网络请求(异步)
call.enqueue(object : Callback<Translation> {
//请求成功时回调
override fun onResponse(call: Call<Translation>, response: Response<Translation>) {
// 步骤7:处理返回的数据结果
response.body().show()
}
//请求失败时回调
override fun onFailure(call: Call<Translation>, throwable: Throwable) {
println("连接失败")
}
})
}
/**
* post方式请求
*/
private fun requestByPost() {
//步骤4:创建Retrofit对象
val retrofit = Retrofit.Builder()
.baseUrl("http://fanyi.youdao.com/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build()
// 步骤5:创建 网络请求接口 的实例
val request = retrofit.create(PostRequest_Interface::class.java)
//对 发送请求 进行封装(设置需要翻译的内容)
val call = request.getCall("I love you")
//步骤6:发送网络请求(异步)
call.enqueue(object : Callback<TranslationPost> {
//请求成功时回调
override fun onResponse(call: Call<TranslationPost>, response: Response<TranslationPost>) {
// 步骤7:处理返回的数据结果:输出翻译的内容
System.out.println(response.body().getTranslateResult().get(0).get(0).getTgt())
}
//请求失败时回调
override fun onFailure(call: Call<TranslationPost>, throwable: Throwable) {
println("请求失败")
println(throwable.message)
}
})
}
}