首先导入gradle Retrofit2.0
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
直接上代码
interface GetRequest_Interface {
@GET("channels/3?pageNo=1&pageSize=20&v=4.0.0")
fun getCall() : Call<MyCarBean>
// @GET注解的作用:采用Get方法发送网络请求
// getCall() = 接收网络请求数据的方法
// 其中返回类型为Call<*>,*是接收数据的类(即上面定义的Translation类)
// 如果想直接获得Responsebody中的内容,可以定义网络请求返回值为Call<ResponseBody>
//动态配置URL地址
@GET("channels/3?pageNo={page}&pageSize=20&v=4.0.0")
fun getIpMsgPath(@Path("page") page: String):Call<MyCarBean>
//动态指定查询条件
@GET("getIpInfo.php")
fun getIpMsgQuery(@Query("ip") ip:String):Call<MyCarBean>
//动态指定查询条件组
@GET("getIpInfo.php")
fun getIpMsgQueryMap(@QueryMap option:Map<String,String>):Call<MyCarBean>
//Post 表单形式请求
@FormUrlEncoded
@POST("getIpInfo.php")
fun getIpMsgPost(@Field("ip") first:String):Call<MyCarBean>
//POST JSON数据请求
@POST("getIpInfo.php")
fun getIpMsgPostBody(@Body ip: String):Call<MyCarBean>
//单文件上传
@Multipart
@POST("user/photo")
fun upDateUser(@Part photo: MultipartBody.Part, @Part("description") description: RequestBody):Call<MyCarBean>
//多文件上传
@Multipart
@POST("user/photo")
fun upDateUser(@PartMap photos:Map<String,String>, @Part("description") description: RequestBody):Call<MyCarBean>
}
实体类
class MyCarBean(var data:List<CarInfo>) {
class CarInfo(
var articleType: String,
var count: String,
var downs: String,
var firstImg: String,
var id: String,
var image: String,
var mtime: String,
var pubDate: String,
var title: String,
var ups: String,
var url: String
)
}
直接在MainActivity 请求数据
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initData()
}
private fun initData() {
var retrofit = Retrofit.Builder()
.baseUrl("http://mrobot.pcauto.com.cn/v2/cms/") //注意这里必须以/结尾不然报错
.addConverterFactory(GsonConverterFactory.create())
.build()
val ipService = retrofit.create(GetRequest_Interface::class.java)
ipService.getCall().enqueue(object: Callback<MyCarBean> {
override fun onResponse(call: Call<MyCarBean>?, response: Response<MyCarBean>?) {
//成功
var myCarBean: MyCarBean? = response!!.body()
var myCarBeanLists: List<MyCarBean.CarInfo> = myCarBean!!.data
for (ca in myCarBeanLists){
Log.v("maz",ca.title)
}
}
override fun onFailure(call: Call<MyCarBean>?, t: Throwable?) {
//失败
}
})
}
}