1

したがって、このコードでは、 my を介して渡されたクエリに基づいてカーソルを取得し、 and を作成しようとしていshowResults()ます。レイアウトとIDを作成したときにエラーが発生したため、コンストラクター内のレイアウトとIDで問題が発生しているように感じます。Log と if ステートメントを使用して、カーソルが null で、logcat に何も表示されないかどうかを確認しました。adapterloadermanagerSimpleCursorAdapter

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

3 に答える 3

1

コードが行list.setAdapter(mAdapter);でクラッシュしlistているため、null ポインターを与えることが理にかなっているオブジェクトは だけです。

さらに調べてみると、list最初に宣言された後に代入していないことが明らかです。onCreate()の後に、次のようなものを追加する必要がありますsetContentView()

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

(これは、オブジェクトに があった場合にアクセスする方法ですandroid:id="@android:id/list"。独自の ID を割り当てた場合は、R.id.your_id_here代わりに使用してください。)

于 2013-01-03T04:04:00.877 に答える
0

これはおそらくあなたのエラーです:

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

そのアダプターは、次のように、パラメーターCursorを渡した場所でコンストラクターに渡される必要があります。null

mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, 
            cursor, new String[] {DatabaseTable.COL_NAME}, new int[] {android.R.id.text1}, 0);
于 2013-01-03T04:04:02.610 に答える
0

クエリを実行する前に、まず読み取り可能なデータベースを取得してみてください。

db = new DatabaseTable(this);
Cursor cursor = db.getReadableDatabase().getContactMatches(query, null);
于 2013-01-03T04:04:28.783 に答える