gpt4 book ai didi

java - AsyncTaks HTTP 请求超时和异常处理

转载 作者:太空狗 更新时间:2023-10-29 14:24:45 27 4
gpt4 key购买 nike

我正在向 Facebook 图形 API 发出 HTTP-get 请求。

在大约 1/5 的情况下,我的代码从未到达 Log.i("debug", "resp");。没有抛出异常。不应该吗?或者默认情况下它只是一个很长的超时时间?

如果我添加自定义超时(见下文),我会抛出异常。但是即使我的代码包含在 try+catch 语句中,我的应用程序也会崩溃(就像处理任何未处理的异常一样),而不是让我在 onPostExecute() 中处理错误。为什么我不在方法中结束?

protected Map<String, Integer> doInBackground(Void... params) {

Map<String, Integer> result = new HashMap<String, Integer>();

try {

HttpGet get = new HttpGet("https://graph.facebook.com/....etc");

//final HttpParams httpParams = httpclient.getParams();
//HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
//HttpConnectionParams.setSoTimeout(httpParams, 5000);

HttpResponse response = httpclient.execute(get);
Log.i("debug", "resp");

HttpEntity resEntityGet = response.getEntity();

//do stuff with resEntityGet

return result;

} catch (Exception e) {
Toast.makeText(mainActivity, "Error: " + ex.getMessage(), Toast.LENGTH_LONG).show();
return null;
}
}

protected void onPostExecute(Map<String, Integer> result) {

if(result != null){
//use the result data
} else {
//exception occured
}
}

最佳答案

如果您将 Toast 发布到 UI 线程,则可以从 doInBackground 方法显示它。有几种方法可以做到这一点,但这里是一种方法:

mainActivity.runOnUiThread( new Runnable() {

@Override
public void run() {
Toast.makeText(mainActivity, "Error: " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
} );

您需要将Exception 变量设为final

关于java - AsyncTaks HTTP 请求超时和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13595664/

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