【发布时间】:2014-05-11 15:16:21
【问题描述】:
我有一个在后台运行的异步任务,它通过网络不断更新我的本地 sqLite 数据库。一切正常,除了我暂停我的应用程序后的一些随机时间。这是我收到错误的部分代码:
public class AsyncHardwareDBUpdate extends AsyncTask {
ImageCellAdapter mImageCellAdapter;
GridView dynGrid;
Context mContext;
Boolean mFinished = false;
HardwareSyncReceiver myHardwareReceiver;
private Handler handler;
public AsyncHardwareDBUpdate(Context mContext) {
this.mContext = mContext;
}
@Override
protected Object doInBackground(Object... params) {
if (mContext != null){
错误转到以下行:
Intent intentHardwareSync = new Intent(mContext,SyncHardwareStateService.class);
我无法理解,如果我已经检查了 mContext 是否为 null,那么这里有什么可以为 null 的!= null。 其余代码:
mContext.startService(intentHardwareSync);
myHardwareReceiver = new HardwareSyncReceiver();
//register BroadcastReceiver
IntentFilter intentHardwareSyncFilter = new IntentFilter(SyncHardwareStateService.ACTION_SyncHardwareStateService);
intentHardwareSyncFilter.addCategory(Intent.CATEGORY_DEFAULT);
//Handler for the separate Thread
HandlerThread handlerThread = new HandlerThread("MyNewThread");
handlerThread.start();
Looper looper = handlerThread.getLooper();
// Create a handler for the service
handler = new Handler(looper);
// Register the broadcast receiver to run on the separate Thread
mContext.registerReceiver (myHardwareReceiver, intentHardwareSyncFilter, null, handler);
}
return null;
}
05-11 18:07:37.830: E/AndroidRuntime(15063): FATAL EXCEPTION: AsyncTask #1
05-11 18:07:37.830: E/AndroidRuntime(15063): java.lang.RuntimeException: An error occured while executing doInBackground()
05-11 18:07:37.830: E/AndroidRuntime(15063): at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-11 18:07:37.830: E/AndroidRuntime(15063): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.lang.Thread.run(Thread.java:856)
05-11 18:07:37.830: E/AndroidRuntime(15063): Caused by: java.lang.NullPointerException
05-11 18:07:37.830: E/AndroidRuntime(15063): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127)
05-11 18:07:37.830: E/AndroidRuntime(15063): at android.content.ComponentName.<init>(ComponentName.java:75)
05-11 18:07:37.830: E/AndroidRuntime(15063): at android.content.Intent.<init>(Intent.java:3350)
05-11 18:07:37.830: E/AndroidRuntime(15063): at com.smarthomev5.AsyncUpdateThread.AsyncHardwareDBUpdate.doInBackground(AsyncHardwareDBUpdate.java:38)
05-11 18:07:37.830: E/AndroidRuntime(15063): at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-11 18:07:37.830: E/AndroidRuntime(15063): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-11 18:07:37.830: E/AndroidRuntime(15063): ... 5 more
【问题讨论】:
-
在 onPostexecute 中启动意图
-
这行得通,谢谢 :) 仍然是一种意外错误..
标签: android android-intent android-asynctask