我正在使用Android AsyncTask从网上获取一些数据。它是一个简单的程序('破解我')从random.org获取字节并显示字节。该程序还将random.org的公钥用于检测拦截代理。
我已实施onPreExecute
,doInBackground
和onPostExecute
。 “一切顺利”时需要这些方法。当doInBackground
出现问题时,我无法显示AlertDialog
,因为它不是UI线程。该接口还缺少在UI线程上执行的onError
或类似方法。
使用此课程时如何传达错误?
答案 0 :(得分:2)
我的建议是在AsyncTask类中创建字段。如果有什么不对的地方就会抛出一些例外:
class SomeAsyncTask<..> extends AsyncTask<..> {
Exception exception = null;
public doInBackground(...) {
try {
. . .
} catch (Exception ex) {
exception = ex;
}
}
public onPostExecute(...) {
if (exception != null) {
// process exception on UI thread
}
}
}
答案 1 :(得分:2)
我在doInBackground
中发现错误,将Exception
保存在字段变量中,如果发生错误,请检入onPostExecute
:
private Exception exception = null;
protected Void doInBackground(Void... params){
try{
doStuff();
} catch (Exception ex){
exception = ex;
}
return null;
}
protected void onPostExecute(Void result){
if(exception != null){
showException(exception);
}
}
您可以使用此代码轻松创建自己的界面,然后在使用时实施doStuff
和showException
方法。
答案 2 :(得分:1)
您应该返回onPostExecute()所需的任何信息,并在那里显示您的对话框。或者您可以将其作为AsyncTask子类的成员存储在本地。
答案 3 :(得分:0)
没有。只需在AsyncTask中发出广播并在任何你喜欢的地方处理广播。 AsyncTask只需要一个Context来发布它,你可以传递给它。可能想发布Sticky广播,以便你可以恢复它。