2014-01-21 90 views
0

我在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; 

       } 

      } 
+2

顯示整個堆棧跟蹤到最後。 –

回答

2

它看起來像你得到一個NPE這裏

if(myDBAdapter.db != null){ 

in insertData()因爲你永遠不會初始化myDBAdapter。你在你的任務中聲明它

public Database myDBAdapter; 

但你在嘗試使用它之前從不初始化它。

它實際上看起來像你有一個Activity變量和一個AsyncTask變量,所以當你在你的任務中聲明它時,它是一個未初始化的局部變量。您可以重新初始化該變量,但如果它們相同,那麼刪除它並確保它是成員變量(如果任務是內部類Activity)會更好。如果它是一個單獨的文件,那麼您將需要初始化它或傳遞對AsyncTask類的構造函數的引用。

+0

是的,我有問題:if(myDBAdapter.db!= null).. 所以,當我嘗試 - 數據庫myDBAdapter =新的數據庫();構造函數應該是主要的? (MainActivity main = new MainActivity())? 嗯,這是工作,但logcat說:數據庫爲空:)所以這是大成功:D – Algeroth

0

它看起來不像你正在初始化任何東西private MainActivity main;。您嘗試在初始化之前使用它。

相關問題