Sai Valluri
Sai Valluri

Reputation: 147

NullPointerException when I run this code

So in this code, I am trying to retrieve a cursor based on the query passed through my showResults() and then create an adapter and loadermanager. I feel like the problem is being caused with the layout and id within my SimpleCursorAdapter constructor because the error started when I created the layout and id. I used Log and if statement to see whether it was the cursor that was null and nothing showed up on the logcat, so that must mean by cursor is fine.

public class SearchResultsActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> {

private ListView list;
private DatabaseTable db;
private SimpleCursorAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_results);
    db = new DatabaseTable(this);
    handleIntent(getIntent());
}

public void onNewIntent(Intent intent) {
    setIntent(intent);
    handleIntent(intent);
}

private void handleIntent(Intent intent) {
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        showResults(query);
    }

}

private void showResults(String query) {
    db = new DatabaseTable(this);
    Cursor cursor = db.getContactMatches(query, null);
    list = (ListView)findViewById(android.R.id.list);
    mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, 
            null, new String[] {DatabaseTable.COL_NAME}, new int[] {android.R.id.text1}, 0);
    getLoaderManager().initLoader(0, null, this);
    list.setAdapter(mAdapter);
    list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent contactIntent = new Intent(getApplicationContext(), ContactActivity.class);
            contactIntent.setData(getIntent().getData());
            startActivity(contactIntent);
        }
    });
}

Upvotes: 1

Views: 245

Answers (3)

ashokgelal
ashokgelal

Reputation: 81528

Try getting a readable database first before you query it:

db = new DatabaseTable(this);
Cursor cursor = db.getReadableDatabase().getContactMatches(query, null);

Upvotes: 0

mango
mango

Reputation: 5636

this is probably your error here:

mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, 
            null, new String[] {DatabaseTable.COL_NAME}, new int[] {android.R.id.text1}, 0);

that adapter requires a Cursor passed into the constructor at the spot where you passed null in for the parameter, like this:

mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, 
            cursor, new String[] {DatabaseTable.COL_NAME}, new int[] {android.R.id.text1}, 0);

Upvotes: 0

Cat
Cat

Reputation: 67502

Since your code is crashing on the line list.setAdapter(mAdapter);, list is the only object that it makes sense to give you a null pointer.

Upon further examination, it is clear you are not assigning list after it is initially declared. You need to add something like this in onCreate(), after setContentView():

list = (ListView) findViewById(android.R.id.list);

(This is how you'd access it if your object had android:id="@android:id/list"; if you assigned your own ID, use R.id.your_id_here instead.)

Upvotes: 1

Related Questions