gpt4 book ai didi

java - 致命异常 : OkHttp Dispatcher

转载 作者:太空狗 更新时间:2023-10-29 15:35:33 25 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求。我已经实现了我的代码,但在执行请求时遇到了致命异常。

我也已经在我的 list 中添加了 INTERNET 权限。

主要 Activity .java:

private CurrentWeather currentWeather;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityMainBinding binding = DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main);

String apiKey = "xxx";
double latitude = 37.8267;
double longitude = -122.4233;
String forecastURL = String.format("https://api.darksky.net/forecast/%s/%f,%f", apiKey, latitude, longitude);

if (isNetworkAvailable()) {
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url(forecastURL)
.build();

Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

}

@Override
public void onResponse(Call call, Response response) throws IOException {
try {
Log.v(TAG, response.body().string());
String jsonData = response.body().string();
if (response.isSuccessful()) {
currentWeather = getCurrentDetails(jsonData);
}

} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage());
} catch (JSONException e) {
Log.e(TAG, e.getLocalizedMessage());
}
}
});
}
Log.d(TAG, "Main UI code is running");
}

private CurrentWeather getCurrentDetails(String jsonData) throws JSONException {

JSONObject forecast = new JSONObject(jsonData);
String timezone = forecast.getString("timezone");

JSONObject currently = forecast.getJSONObject("currently");

String icon = currently.getString("icon");
String locationLabel = "Alcatraz Island";
String summary = currently.getString("summary");
long time = currently.getLong("time");
double humidity = currently.getDouble("humidity");
double precipProbability = currently.getDouble("precipProbability");
double temperature = currently.getDouble("temperature");

return new CurrentWeather(locationLabel, icon, time, temperature, humidity, precipProbability, summary, timezone);
}

Gradle :

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

然后,这是我得到的异常:

2018-12-04 20:55:49.969 3314-3330/com.test.starmie E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.test.starmie, PID: 3314
java.lang.IllegalStateException: closed
at okio.RealBufferedSource.rangeEquals(RealBufferedSource.java:407)
at okio.RealBufferedSource.rangeEquals(RealBufferedSource.java:401)
at okhttp3.internal.Util.bomAwareCharset(Util.java:471)
at okhttp3.ResponseBody.string(ResponseBody.java:175)
at com.test.starmie.MainActivity$1.onResponse(MainActivity.java:66)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:206)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)

我现在不知道该怎么办。我已经阅读并找到了一些关于这个主题的帖子。根据我收集到的信息,必须在 runOnUiThread() block 中进行 UI 更改。但是我没有在我的代码中进行任何 UI 更改,我仍然得到异常。

我也已经尝试将我的 JSON 解析代码放入 runOnUiThread() 并得到相同的致命异常结果。有人有什么想法吗?

最佳答案

Response 主体只能使用一次。你成功了两次

Log.v(TAG, response.body().string());
String jsonData = response.body().string();

更多信息请参见 docs

关于java - 致命异常 : OkHttp Dispatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53613615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com