Kotlin Retrofit 中是否有一种方法与 Kotlin AsyncTask 的 OnPreExecute 等效?
Is there a way in Kotlin Retrofit that works equivalent as OnPreExecute of Kotlin AsyncTask?
我有一个MainActivity.kt
由NetworkConfig.kt
class提供的呼叫服务(我是Android开发的初学者)。
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
NetworkConfig().getService()
.getUsers()
.enqueue(object : Callback<List<UserDataClassItem>> {
override fun onFailure(call: Call<List<UserDataClassItem>>, t: Throwable) {
Toast.makeText(this@MainActivity, "No Connection. Check your Connectivity", Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<List<UserDataClassItem>>,
response: Response<List<UserDataClassItem>>
) {
rvUser.adapter = UserAdapter(response.body())
}
})
}
}
NetworkConfig.kt
class NetworkConfig {
// set interceptor
private fun getInterceptor() : OkHttpClient {
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder()
.addInterceptor(logging)
.build()
}
private fun getRetrofit() : Retrofit {
return Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.client(getInterceptor())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
fun getService() = getRetrofit().create(Users::class.java)
}
//Access https://jsonplaceholder.typicode.com/users
interface Users {
@GET("users")
fun getUsers(): Call<List<UserDataClassItem>>
}
我想知道Retrofit有没有办法在App在后台获取服务时执行任务(比如显示进度条)?
与 AsyncTask 的 onPreExecute 函数等效的东西。
如果有任何不清楚的地方,请告诉我。
在您的网络调用之前,您可以将 ProgressBar
可见性设置为 View.VISIBLE
,然后在 Retrofit 的 onResponse()
和 onFailure()
中,将其可见性设置为 View.GONE
.
像这样:
progressbar.visibility = View.VISIBLE
NetworkConfig().getService()
.getUsers()
.enqueue(object : Callback<List<UserDataClassItem>> {
override fun onFailure(call: Call<List<UserDataClassItem>>, t: Throwable) {
progressbar.visibility = View.GONE
Toast.makeText(this@MainActivity, "No Connection. Check your Connectivity", Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<List<UserDataClassItem>>,
response: Response<List<UserDataClassItem>>
) {
progressbar.visibility = View.GONE
rvUser.adapter = UserAdapter(response.body())
}
})
改造入队将以异步方式执行
//You could show progress bar here
NetworkConfig().getService()
.getUsers()
.enqueue(object : Callback<List<UserDataClassItem>> {
override fun onFailure(call: Call<List<UserDataClassItem>>, t: Throwable) {
//You could hide progressBar here
Toast.makeText(this@MainActivity, "No Connection. Check your Connectivity", Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<List<UserDataClassItem>>,
response: Response<List<UserDataClassItem>>
) {
//You could hide progressBar here
rvUser.adapter = UserAdapter(response.body())
}
})
我有一个MainActivity.kt
由NetworkConfig.kt
class提供的呼叫服务(我是Android开发的初学者)。
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
NetworkConfig().getService()
.getUsers()
.enqueue(object : Callback<List<UserDataClassItem>> {
override fun onFailure(call: Call<List<UserDataClassItem>>, t: Throwable) {
Toast.makeText(this@MainActivity, "No Connection. Check your Connectivity", Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<List<UserDataClassItem>>,
response: Response<List<UserDataClassItem>>
) {
rvUser.adapter = UserAdapter(response.body())
}
})
}
}
NetworkConfig.kt
class NetworkConfig {
// set interceptor
private fun getInterceptor() : OkHttpClient {
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder()
.addInterceptor(logging)
.build()
}
private fun getRetrofit() : Retrofit {
return Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.client(getInterceptor())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
fun getService() = getRetrofit().create(Users::class.java)
}
//Access https://jsonplaceholder.typicode.com/users
interface Users {
@GET("users")
fun getUsers(): Call<List<UserDataClassItem>>
}
我想知道Retrofit有没有办法在App在后台获取服务时执行任务(比如显示进度条)? 与 AsyncTask 的 onPreExecute 函数等效的东西。
如果有任何不清楚的地方,请告诉我。
在您的网络调用之前,您可以将 ProgressBar
可见性设置为 View.VISIBLE
,然后在 Retrofit 的 onResponse()
和 onFailure()
中,将其可见性设置为 View.GONE
.
像这样:
progressbar.visibility = View.VISIBLE
NetworkConfig().getService()
.getUsers()
.enqueue(object : Callback<List<UserDataClassItem>> {
override fun onFailure(call: Call<List<UserDataClassItem>>, t: Throwable) {
progressbar.visibility = View.GONE
Toast.makeText(this@MainActivity, "No Connection. Check your Connectivity", Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<List<UserDataClassItem>>,
response: Response<List<UserDataClassItem>>
) {
progressbar.visibility = View.GONE
rvUser.adapter = UserAdapter(response.body())
}
})
改造入队将以异步方式执行
//You could show progress bar here
NetworkConfig().getService()
.getUsers()
.enqueue(object : Callback<List<UserDataClassItem>> {
override fun onFailure(call: Call<List<UserDataClassItem>>, t: Throwable) {
//You could hide progressBar here
Toast.makeText(this@MainActivity, "No Connection. Check your Connectivity", Toast.LENGTH_SHORT).show()
}
override fun onResponse(
call: Call<List<UserDataClassItem>>,
response: Response<List<UserDataClassItem>>
) {
//You could hide progressBar here
rvUser.adapter = UserAdapter(response.body())
}
})