Я пытаюсь изучить разбиение на страницы, реализуя Сеть подкачки + базу данных Google Codelab Example . Однако MindOrks показывает пошаговый процесс. Но я получаю сообщение об ошибке. Я следую шагам MindOrks , потому что они явно использовали PagedList.BoundaryCallback . Таким образом, между кодами есть небольшое изменение, но результат остается прежним. В реализации MindOrks забыли добавить .setBoundaryCallback(boundaryCallback)
, которое необходимо для вызова class BoundaryCondition
. Проблема в том, что методы onResponse и onFailure не вызываются. Когда я смотрю на logcat
, соединение в порядке.
private const val TAG = "GithubService"
private const val IN_QUALIFIER = "in:name,description"
fun searchRepos(
service: GithubService,
query: String,
page: Int,
itemsPerPage: Int,
onSuccess: (repos: List<Repo>) -> Unit,
onError: (error: String) -> Unit
) {
Log.d(MY_TAG, "query: $query, page: $page, itemsPerPage: $itemsPerPage")
val apiQuery = query + IN_QUALIFIER
service.searchRepos(apiQuery, page, itemsPerPage).enqueue(
object : Callback<RepoSearchResponse> {
override fun onFailure(call: Call<RepoSearchResponse>?, t: Throwable) {
t.printStackTrace()
Log.d(MY_TAG, "fail to get data")
onError(t.message ?: "unknown error")
}
override fun onResponse(
call: Call<RepoSearchResponse>?,
response: Response<RepoSearchResponse>
) {
Log.d(MY_TAG, "got a response $response")
if (response.isSuccessful) {
Log.d(MY_TAG, "Github Service: Got Response")
val repos = response.body()?.items ?: emptyList()
Log.d(MY_TAG, "Github Service: Got Repos")
onSuccess(repos)
} else {
Log.d(MY_TAG, "Github Service: unknown Error")
onError(response.errorBody()?.string() ?: "Unknown error")
}
}
}
)
}
interface GithubService {
@GET("search/repositories?sort=stars")
fun searchRepos(
@Query("q") query: String,
@Query("page") page: Int,
@Query("per_page") itemsPerPage: Int
): Call<RepoSearchResponse>
companion object {
private const val BASE_URL = "https://api.github.com/"
fun create(): GithubService {
val logger = HttpLoggingInterceptor()
logger.level = Level.BASIC
val client = OkHttpClient.Builder()
.addInterceptor(logger)
.build()
return Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(GithubService::class.java)
}
}
}
Даже Log.d(MY_TAG, "query: $query, page: $page, itemsPerPage: $itemsPerPage")
этот код выполняется.
2020-05-25 19:43:21.702 1333-1369/com.example.pagingpractice I/okhttp.OkHttpClient: --> GET https://api.github.com/search/repositories?sort=stars&q=Androidin%3Aname%2Cdescription&page=1&per_page=50
2020-05-25 19:43:21.897 1333-1365/com.example.pagingpractice D/vndksupport: Loading /vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.
2020-05-25 19:43:21.898 1333-1365/com.example.pagingpractice D/vndksupport: Loading /vendor/lib64/hw/gralloc.msm8953.so from current namespace instead of sphal namespace.
2020-05-25 19:43:24.080 1333-1369/com.example.pagingpractice I/okhttp.OkHttpClient: <-- 200 OK https://api.github.com/search/repositories?sort=stars&q=Androidin%3Aname%2Cdescription&page=1&per_page=50 (2377ms, unknown-length body)
2020-05-25 19:43:24.314 1333-1369/com.example.pagingpractice E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.example.pagingpractice , PID: 1333
java.lang.BootstrapMethodError: Exception from call site #1 bootstrap method
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.onResponse(DefaultCallAdapterFactory.java:82)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:161)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:504)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassCastException: Bootstrap method returned null
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.onResponse(DefaultCallAdapterFactory.java:82)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:161)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:504)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2020-05-25 19:43:24.351 1333-1369/com.example.pagingpractice