0

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?

3
  • 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? Commented Jul 24, 2013 at 12:06
  • Cursor cursor = database.query(TABLE, COLUMNS, selection, params, null,null, null); This is the line 21. Commented Jul 24, 2013 at 12:12
  • Make sure that database and params are not NULL Commented Jul 24, 2013 at 12:17

1 Answer 1

2

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;
};
Sign up to request clarification or add additional context in comments.

1 Comment

I've done this with a small edit. Included cursor.close(); inside the try/catch block. Thanks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.