【发布时间】:2019-03-30 00:24:42
【问题描述】:
我在这里写了一段代码:
public class Wizard1 extends GuidedStepFragment implements Callback {
private boolean sendPhoneNumber(String userPhoneNumber) {
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("request_magic_code", Urls.REQUEST_MAGIC_CODE)
.build();
Request request = new Request.Builder()
.url(Urls.HOST + Urls.SEND_PHONE_NUMBER)
.post(requestBody)
.build();
client.newCall(request).enqueue(this);
return success;
}
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
ResponseBody myResponse = response.body();
Log.d("SS", response.body().string());
Log.d("SS", response.body().string());
if (myResponse != null) {
success = true;
}
}
当我运行它时,令人惊讶的是我得到了 java.lang.IllegalStateException。更令人惊讶的是,如果我删除第二条 Log.d 行,异常将不会发生!
发生了什么?为什么在 onResponse 中添加虚拟行会导致此错误?
这是完整的错误日志:
10-24 05:16:38.307 6639-6659/com.example.android.persistence W/System.err:java.lang.IllegalStateException:关闭 在 okio.RealBufferedSource.rangeEquals(RealBufferedSource.java:398) 在 okio.RealBufferedSource.rangeEquals(RealBufferedSource.java:392) 在 okhttp3.internal.Util.bomAwareCharset(Util.java:431) 在 okhttp3.ResponseBody.string(ResponseBody.java:174) 10-24 05:16:38.308 6639-6659/com.example.android.persistence W/System.err:
在 android.support.v17.leanback.supportleanbackshowcase.app.wizard.WizardGetPhoneNumber.onResponse(WizardGetPhoneNumber.java:244) 在 okhttp3.RealCall$AsyncCall.execute(RealCall.java:141) 在 okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)
【问题讨论】:
标签: android retrofit2 okhttp leanback