2013-07-24 5 views
0

Я пробовал приложение, в котором я использую AsyncTask для извлечения данных из таблицы sqlite. Это время от времени работает без этой проблемы. Но когда это не удается, Logcat выглядит следующим образомRuntimeException в AsyncTask при запросе базы данных sqlite

07-24 16: 06: 20,477: E/AndroidRuntime (950): FATAL ИСКЛЮЧЕНИЕ: AsyncTask # 1

07-24 16: 06: 20,477 : E/AndroidRuntime (950): java.lang.RuntimeException: Произошла ошибка во время выполнения doInBackground()

07-24 16: 06: 20.477: E/AndroidRuntime (950): at android.os.AsyncTask $ 3. сделано (AsyncTask.java:278)

07-24 16: 06: 20.477: E/AndroidRuntime (950): при java.util.concurrent.FutureTask $ Sync.innerSetException (FutureTask.java:273)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): в java.util.concurrent.FutureTask.setException (FutureTask.java:124)

07-24 16: 06: 20,477: E/AndroidRuntime (950): при java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:307)

07-24 16: 06: 20.477: E/AndroidRuntime (950): at java.util .concurrent.FutureTask.run (FutureTask.java:137)

07-24 16: 06: 20.477: E/AndroidRuntime (950): at android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:208)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1076)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:569)

07-24 16: 06: 20.477: E/AndroidRuntime (950): на java.lang.Thread .run (Thread.java:856)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): Вызванный: java.lang.NullPointerException

07-24 16: 06: 20.477: E/AndroidRuntime (950): a т com.brionsoftwares.android.pilgrimhelper.test.PilgrimDao.getPilgrim (PilgrimDao.java:21)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): в com.brionsoftwares.android.pilgrimhelper. PilgrimSearchActivity $ DataQuery.doInBackground (PilgrimSearchActivity.java:45)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): в com.brionsoftwares.android.pilgrimhelper.PilgrimSearchActivity $ DataQuery.doInBackground (PilgrimSearchActivity.java : 1)

07-24 16: 06: 20,477: Е/AndroidRuntime (950): в android.os.AsyncTask $ 2.call (AsyncTask.java:264)

07-24 16: 06: 20.477: E/AndroidRuntime (950): при java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305)

07-24 16: 06: 20.477: E/AndroidRuntime (950): ...5 более

AsyncTask

protected Void doInBackground(String... params) { 
     List<Pilgrim> pilgrimList=PilgrimDao.getPilgrim(pilgrimDatabase.getSqlLiteDatabase(), params); 
     ArrayList<Map<String, String>> list = buildData(pilgrimList); 
     String[] from={"Name","District"}; 
     int[] to={android.R.id.text1, android.R.id.text2}; 
     simpleAdapter= new SimpleAdapter(getApplicationContext(), list, R.layout.simple_list_item_2, from, to); 
     return null; 

    } 

    @Override 
    protected void onPostExecute(Void result) { 
     mProgressBar.setVisibility(View.GONE); 
     mListView.setAdapter(simpleAdapter); 
     mListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       Toast.makeText(PilgrimSearchActivity.this, "Select", Toast.LENGTH_LONG).show(); 

      } 

     }); 
     super.onPostExecute(result); 
    } 



} 

PilgrimDao.getPilgrim метод

public static List<Pilgrim> getPilgrim(SQLiteDatabase database, String[] params) { 
    List<Pilgrim> shippers = new LinkedList<Pilgrim>(); 
    String selection="Name = ?"; 
    Cursor cursor = database.query(TABLE, COLUMNS, selection, params, null,null, null);   //line 21 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     Pilgrim pilgrim= new Pilgrim(); 
     pilgrim.setName(cursor.getString(0)); 
     pilgrim.setDistrict(cursor.getString(1)); 
     shippers.add(pilgrim); 
     cursor.moveToNext(); 
    } 
    cursor.close(); 
    Log.v(PilgrimSearchActivity.TAG,"PilgrimDao returning " + shippers.size() + " shippers"); 
    return shippers; 
} 

Почему выход нити? Какие изменения я могу сделать, чтобы этот код работал плавно?

+0

Я думаю, что Исключение является самоочевидным. Вы получили исключение Null Pointer в строке 21 в файле PilgrimDao.java, что соответствует строке 21 вашего кода? –

+0

'Курсор cursor = database.query (TABLE, COLUMNS, selection, params, null, null, null);' Это строка 21. –

+0

Убедитесь, что база данных и параметры не являются NULL –

ответ

2

Как вы можете видеть в комментариях, вы получаете исключение из null-указателя, может быть, URI, который вы передаете, неверен или любой параметр, убедитесь, что они верны. попробуйте следующее:

public static List<Pilgrim> getPilgrim(SQLiteDatabase database, String[] params) { 
List<Pilgrim> shippers = new LinkedList<Pilgrim>(); 
String selection="Name = ?"; 
try{ 
    Cursor cursor = database.query(TABLE, COLUMNS, selection, params, null,null,null);   //line 21 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
    Pilgrim pilgrim= new Pilgrim(); 
    pilgrim.setName(cursor.getString(0)); 
    pilgrim.setDistrict(cursor.getString(1)); 
    shippers.add(pilgrim); 
    cursor.moveToNext(); 
    } 
}catch (Exception e) 
{ 
    e.printStackTrace();//this will print in your logcat any possible exception. 
} 
cursor.close(); 
Log.v(PilgrimSearchActivity.TAG,"PilgrimDao returning " + shippers.size() + " shippers"); 
return shippers; 
}; 
+0

Я сделал это с помощью маленький редактирование. Включено 'cursor.close();' внутри блока try/catch. благодаря –

Смежные вопросы