我对Android开发很新,所以这是向前迈出的一步,每当我想出一些东西时,我都会退后两步。我在使用OkHttp库发出请求时遇到问题。我一开始使用Volley并且工作正常,但是我正在使用的API端点在一些DELETE方法请求中需要一个正文,而Volley不支持这些请求。
我在Activity的onStart方法中有以下内容。
final Request request = new Request.Builder()
.url("<some url>")
.addHeader("Authorization", "<some token>")
.build();
new Thread(() -> {
try(Response response = mClient.newCall(request).execute()) {
final String body = response.body() != null ? response.body().string() : null;
runOnUiThread(() -> {
if (body != null && !body.isEmpty()) {
Log.d(TAG, "Successful response");
}
else {
Log.d(TAG, "No body in response");
}
});
}
catch(final IOException error) {
runOnUiThread(() -> {
Log.d(TAG, "Exception: " + error.getMessage());
});
}
});
然而,android studio的网络分析器显示没有任何内容,并且没有记录日志消息,但如果我正确地执行此操作,我不知道。我确实让它像Volley中提到的那样工作,但是Volley在内部处理后台进程,所以这是我第一次尝试使用它。我最初在runOnUIThread之外的日志消息因为它实际上没有触及UI而我认为它不需要在其中(没有错误,但仍然没有日志)
当活动运行时,我确实在调试窗口中得到了这个输出,但我真的不知道这意味着什么,或者它是否告诉我有关为什么我没有看到请求的任何有用信息。
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@5afe552
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
W/etefromplaylis: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V (light greylist, reflection)
Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V (light greylist, reflection)
Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (light greylist, reflection)
Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (light greylist, reflection)
W/etefromplaylis: Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (light greylist, reflection)
Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (light greylist, reflection)
Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (light greylist, reflection)
我刚刚意识到我从未在Thread上调用start()。就是这样。