implementation libs.retrofit
// Moshi Converter
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
package com.example.myapplication
data class BannerData(
val `data`: List<Data>,
val errorCode: Int,
val errorMsg: String
)
package com.example.myapplication
data class Data(
val desc: String,
val id: Int,
val imagePath: String,
val isVisible: Int,
val order: Int,
val title: String,
val type: Int,
val url: String
)
val retrofit = Retrofit.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(MoshiConverterFactory.create())
.build()
val bannerService = retrofit.create(BannerService::class.java)
bannerService.listRepos().enqueue(object : Callback<BannerData> {
override fun onResponse(p0: Call<BannerData>, p1: Response<BannerData>) {
println("当前线程===>${Thread.currentThread().name}")
println("data${p1.body()?.data?.get(0)?.imagePath}")
}
override fun onFailure(p0: Call<BannerData>, p1: Throwable) {
}
})
package com.example.myapplication
import retrofit2.Call
import retrofit2.http.GET
interface BannerService {
@GET("/banner/json")
fun listRepos(): Call<BannerData>
}
内部线程切换
/*
* Copyright (C) 2013 Square, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package retrofit2;
import android.os.Handler;
import android.os.Looper;
import java.util.concurrent.Executor;
final class AndroidMainExecutor implements Executor {
private final Handler handler = new Handler(Looper.getMainLooper());
@Override
public void execute(Runnable r) {
handler.post(r);
}
}