0
votes

I have been trying out an application where I use the AsyncTask to retrieve the data from sqlite table. It occassionally works without that much of a problem. But when it fails, the Logcat looks like this

07-24 16:06:20.477: E/AndroidRuntime(950): FATAL EXCEPTION: AsyncTask #1

07-24 16:06:20.477: E/AndroidRuntime(950): java.lang.RuntimeException: An error occured while executing doInBackground()

07-24 16:06:20.477: E/AndroidRuntime(950): at android.os.AsyncTask$3.done(AsyncTask.java:278)

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

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

07-24 16:06:20.477: E/AndroidRuntime(950): at 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: E/AndroidRuntime(950): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)

07-24 16:06:20.477: E/AndroidRuntime(950): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)

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

07-24 16:06:20.477: E/AndroidRuntime(950): Caused by: java.lang.NullPointerException

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

07-24 16:06:20.477: E/AndroidRuntime(950): at com.brionsoftwares.android.pilgrimhelper.PilgrimSearchActivity$DataQuery.doInBackground(PilgrimSearchActivity.java:45)

07-24 16:06:20.477: E/AndroidRuntime(950): at com.brionsoftwares.android.pilgrimhelper.PilgrimSearchActivity$DataQuery.doInBackground(PilgrimSearchActivity.java:1)

07-24 16:06:20.477: E/AndroidRuntime(950): at android.os.AsyncTask$2.call(AsyncTask.java:264)

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

07-24 16:06:20.477: E/AndroidRuntime(950): ... 5 more

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 method

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;
}

Why does the thread exit? What changes can I make to make this code run smoothly?

1
I think the Exception is self explanatory. You got a Null Pointer exception at Line 21 in PilgrimDao.java file so which is line 21 in your code? - Arun C
Cursor cursor = database.query(TABLE, COLUMNS, selection, params, null,null, null); This is the line 21. - Abdul Wadhood Rehman
Make sure that database and params are not NULL - Arun C

1 Answers

2
votes

As you can see on the comments, you are getting a null pointer exception, could be the URI you are passing is wrong, or any param, make sure are correct. try this:

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;
};