网络通信层。 AsyncTask错误处理
目前我正在实施网络通信层。我认为先与更有经验的Android开发人员进行磋商是一件好事。网络通信层。 AsyncTask错误处理
我有一个名为WebApiController的类,负责:请求和解析响应,并将它们存储在模型中。 WebApiController方法在主线程上执行,因此我将它们包装在AsyncTasks中以将负载从主线程中取出。 WebApiController方法可能会抛出异常,如ServerBadResponseException,XmlParserException等。我希望能够根据错误类型处理它们(即根据错误类型显示不同的错误消息)。那么,通知onPostExecute关于错误类型的最好方法是什么,并且很好地处理它。
或者这样:
class SomeTask extends AsyncTask<Void, Void, Params> {
@Override
protected Params doInBackground(Void... voids) {
Params params = new Params();
try {
.....
params._result = .....
} catch (Throwable e) {
params._error = e;
}
return params;
}
@Override
protected void onPostExecute(Params params) {
if(params._error != null){
....
} else {
....
}
}
}
class Params {
public Throwable _error;
public Object _result;
}
你可以试试这个(在doInBackgroung法):
try {
........
} catch (final Throwable e) {
runOnUiThread(new Runnable() {
public void run() {
Log.e(TAG, e.getMessage(), e);
Toast.makeText(......).show();
}
});
}
基本上最简单的方法是设置一个返回代码,如 “成功”, “FAILURE_XY” 和在您的onPostExecute()
中处理。这个作品也,当你通常会返回数据...
doInBackground() {
try {
// code
return data;
} catch (Exception e) {
Log.e(TAG, "error description", e);
resultCode = FAILURE;
return null;
}
}
onPostExecute(Data data) {
if (data == null) {
// check resultCode!
} else {
// work with your data
}
}
@appserv显示的基本上是你正在寻找的东西。对于基本的结果代码至少要有一个Enum或简单的整数是很重要的。根据UX,您应该向用户显示错误消息本身。只需记录它们并向用户显示出现问题。甚至不要开始向他们展示真正的异常信息! – WarrenFaith 2012-02-24 10:37:39
那就是我的意思 – WarrenFaith 2012-02-24 13:41:44
'我有一些想法如何处理这个问题,但我不舒尔他们很good'如何分享你的想法? – WarrenFaith 2012-02-24 09:16:26
=)好的。枚举我们可以发送给onPostExecute的错误,然后在那里处理它,或者在doInBackround中运行runOnUiThread。但是它们对我来说很糟糕 – 2012-02-24 09:27:19