【发布时间】:2010-11-19 06:26:54
【问题描述】:
我承认,我在整个 Android 方面都是新手。我正在尝试制作一个应用程序,但随机出现强制关闭错误,我真的不知道为什么。我的应用程序有很多活动,当我开始一个新的活动时,它们都没有完成()。我从 Web 获取数据(通过 Web 服务和直接图像下载)并且我经常使用 AsyncTask。大多数时候它在异步任务上崩溃。这是我如何做事的示例:
private BackTask backTask;
Activity ctx = this;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask = new BackTask();
backTask.execute();
}
protected class BackTask extends AsyncTask<Context, String, myObject>
{
@Override
protected myObject doInBackground(Context... params)
{
try{
if (hasInternet(ctx)==true)
{
//access the web SERVICE here
//initialize myObject WITH result FROM the web
return myObject
}
else
{
return null
}
}catch(Exception ex){
return null;
}
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
}
@Override
protected void onCancelled()
{
super.onCancelled();
}
@Override
protected void onPostExecute( myObject result )
{
super.onPostExecute(result);
if (result==null || result.isEmpty())
{
//no valid result, show a message
}
else
{
//result valid do something with it
}
}
}
@Override
public void onPause()
{
if (backTask!=null && ! backTask.isCancelled())
{
backTask.cancel(true);
}
super.onPause();
}
public void btnStartOnClick(View target) {
Intent intent = new Intent(this, MyNewActivity.class);
startActivity(intent);
}
当活动获得 onPause() 时,任务被取消。如果出现错误,我不确定在 try/catch 期间会发生什么,从我所做的来看,它应该返回 null,但我认为在这里我错过了一些东西。正如我之前所说,即使我在另一个活动中,我也会随机关闭。这真的很令人沮丧,因为我无法提供具有这种行为的应用程序。那么,我做错了什么?
【问题讨论】:
-
如果有 FC,您应该检查日志(来自 sdk/tools 目录的命令行中的“adb shell logcat”;或在 Eclipse DDMS 视图中)。然后在此处粘贴错误日志。
-
我检查了日志并且可变的是异步任务中的空指针异常......问题是当我收到消息时我正在进行另一个活动。