我在Android中遇到AsyncTask问题。我尝试从Accelerometr插入数据到数据库,当用户按下开始。通常,当用户按下开始按钮时,应用程序会在5秒钟后挂起。所以我尽量放的AsyncTask这个功能,但我有问题,编译:AsyncTask - 执行doInBackground()时发生错误
01-21 17:44:58.515: E/AndroidRuntime(1131): FATAL EXCEPTION: AsyncTask #1
01-21 17:44:58.515: E/AndroidRuntime(1131): java.lang.RuntimeException: An error occured while executing doInBackground()
01-21 17:44:58.515: E/AndroidRuntime(1131): at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-21 17:44:58.515: E/AndroidRuntime(1131): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.lang.Thread.run(Thread.java:841)
01-21 17:44:58.515: E/AndroidRuntime(1131): Caused by: java.lang.NullPointerException
01-21 17:44:58.515: E/AndroidRuntime(1131): at pl.pawelfrydrych.flyingball.MyTask.insertData(MyTask.java:37)
01-21 17:44:58.515: E/AndroidRuntime(1131): at pl.pawelfrydrych.flyingball.MyTask.doInBackground(MyTask.java:18)
01-21 17:44:58.515: E/AndroidRuntime(1131): at pl.pawelfrydrych.flyingball.MyTask.doInBackground(MyTask.java:1)
01-21 17:44:58.515: E/AndroidRuntime(1131): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-21 17:44:58.515: E/AndroidRuntime(1131): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-21 17:44:58.515: E/AndroidRuntime(1131): ... 4 more
MyTask类:
import java.util.Date;
import android.content.ContentValues;
import android.os.AsyncTask;
import android.util.Log;
public class MyTask extends AsyncTask<Void, Void, Void> {
private MainActivity main;
public Database myDBAdapter;
private int abc;
@Override
protected Void doInBackground(Void... arg0) {
try {
//18 line// insertData();
} catch (InterruptedException e) {
Log.d("appname","błąd w doInBackground");
e.printStackTrace();
}
return null;
}
public void insertData() throws InterruptedException{
ContentValues values = new ContentValues();
Date date = new Date();
while(true){
long millis = System.currentTimeMillis();
abc++;
values.put(Database.ID, 1+abc);
values.put(Database.LEFT_POSITION, main.xPosition);
values.put(Database.RIGHT_POSITION, main.yPosition);
values.put(Database.GPS, main.GPSposition);
values.put(Database.TIME, date.toString());
if(myDBAdapter.db != null){
myDBAdapter.db.insert("baza", null, values);
Thread.sleep(1000 - millis % 1000);
}else{
Log.d(Database.DB_NAME,"db is null");
}
}
}
}
MainActivity类别:
public void onClick(View v) {
switch(v.getId()){
case R.id.bStart:
myDBAdapter = new Database(this).open();
new MyTask().execute();
case R.id.bStop:
myDBAdapter.close();
break;
}
}
显示整个堆栈跟踪到最后。 –