検索を実行しようとすると、ログに NullPointerException が記録されます。query() メソッドと getContactMatches() メソッドの両方を使用して、検索から取得したクエリをデータベース内の連絡先名と照合しようとしています。ログは、これらのメソッド内のコードを指しているようです。query() メソッドは getContactMatches() 内で使用されているため、エラーは query() から発生していると思いますが、わかりません。
データベース クラスのコード:
public Cursor getContactMatches(String query, String[] columns) {
String selection = COL_NAME + " MATCH ?";
String[] selectionArgs = new String[] {query+"*"};
return query(selection, selectionArgs, columns);
}
private Cursor query(String selection, String[] selectionArgs, String[] columns) {
SQLiteQueryBuilder build = new SQLiteQueryBuilder();
build.setTables(DATABASE_TABLE);
Cursor cursor = build.query(DBHelper.getReadableDatabase(),
columns, selection, selectionArgs, null, null, null);
if (cursor == null) {
return null;
}
return cursor;
}
検索アクティビティ クラスのコード:
public class SearchResultsActivity extends ListActivity {
private ListView list;
DatabaseTable db;
@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_VIEW.equals(intent.getAction())) {
Intent contactIntent = new Intent(this, ContactActivity.class);
contactIntent.setData(intent.getData());
startActivity(contactIntent);
finish();
} else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
showResults(query);
}
}
private void showResults(String query) {
int name = 0;
String c = "";
Cursor cursor = db.getContactMatches(query, null);
int cursor_length = db.cursorLength(cursor);
String[] display = new String[cursor_length];
list = (ListView)findViewById(android.R.id.list);
int x = 0;
//Loading data through Cursor into String array
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())
{
name = cursor.getColumnIndex(DatabaseTable.COL_NAME);
c = (cursor.getString(name));
display[x] = c;
c = "";
x = x + 1;
name = 0;
}
ArrayAdapter<String> contactAdapter = new ArrayAdapter<String>(this,
R.layout.activity_search_results, android.R.id.list, display);
list.setAdapter(contactAdapter);
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);
}
});
}
ログ:
12-27 20:57:24.962: E/AndroidRuntime(635): FATAL EXCEPTION: main
12-27 20:57:24.962: E/AndroidRuntime(635): java.lang.NullPointerException
12-27 20:57:24.962: E/AndroidRuntime(635): at com.example.myfirstapp.DatabaseTable.query(DatabaseTable.java:99)
12-27 20:57:24.962: E/AndroidRuntime(635): at com.example.myfirstapp.DatabaseTable.getContactMatches(DatabaseTable.java:92)
12-27 20:57:24.962: E/AndroidRuntime(635): at com.example.myfirstapp.SearchResultsActivity.showResults(SearchResultsActivity.java:51)
12-27 20:57:24.962: E/AndroidRuntime(635): at com.example.myfirstapp.SearchResultsActivity.handleIntent(SearchResultsActivity.java:43)