【发布时间】:2015-06-22 09:52:23
【问题描述】:
我在某些设备上遇到过这个问题,尤其是三星。
我有一个包含 7 个fragments 的活动。在大多数情况下,我会启动一个async 任务来获取一些数据。我通过在 onCreateView() 中创建处理程序来处理异常。
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 0) {
Toast.makeText(getActivity().getApplicationContext(), getActivity().getResources().getString(R.string.connection_timed_out), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
在进行API 调用时,在catch 块中,如果发生异常,我会取消async 任务并在onCancelled() 回调中通知处理程序。
new AsyncTask<Void, Void, ArrayList<UserProfile>>() {
@Override
protected ArrayList<UserProfile> doInBackground(Void... params) {
try {
return new APIService().GetUserProfiles(EnloopApplication.getCurrent().getAuthenticationToken(), thisUserProfile.getEnloop_friends());
} catch (WampNetworkException e) {
cancel(true);
e.printStackTrace();
} catch (WampApiException e) {
e.printStackTrace();
} catch (SocketTimeoutException e) {
cancel(true);
}
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
handler.sendEmptyMessage(0);
}
在大多数设备上,它可以工作,但在Samsung 设备上,有时我会得到null pointer exception,因为getActivity() 没有返回任何内容,就好像activity 被销毁并且再也没有被创建一样。问题是活动没有在代码中被破坏,因为唯一发生的事情是在同一 activity 中的 fragments 之间切换。
【问题讨论】:
标签: android android-fragments asynchronous