私はちょうど私のアプリのための非常に単純なスコア画面を構築し始めたが、何も起こっていないようだと私は理由を把握することはできません。
ListActivity:
public class HighScoresActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.high_scores);
ScoresDatabase db = new ScoresDatabase(this);
Cursor data = db.getHighScores();
ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, data, new String[] { "level" }, new int[] { R.id.level_text });
setListAdapter(adapter);
data.close();
db.close();
}
}
high_scores.xml:
<?xml version="1.0" encoding="utf-8"?>
エラーメッセージはまったくありません。単純に何も起こりません。 そのカーソルが空でないということではなく、adapter.getCount()メソッドをテストすると、〜30が返されます。これは、まさに期待どおりです。
私はすべての関数名がかなり直感的だと思いますが、何か明確化が必要な場合は、ただ質問してください。
どんな援助も大きく改善されています
data.close();//DON'T DO THIS
Cursor.close()のドキュメントから
カーソルを閉じて、すべてのリソースを解放し、完全に無効にします。 deactivate()とは異なり、requery()の呼び出しはカーソルを再び有効にしません。
ListView
の Adapter
は 'live' Cursor
を持っていなければ機能しません。また、データベースを閉じることは必ずしも良いことではなく、特定のケースで(私の経験では)悪影響を及ぼす可能性があります - それが問題の原因になるかどうかはわかりません。
EDIT: In light of Dave Newton's comment and having checked some of my own code, the problem will be with calling close()
on both the Cursor
and also the database. In short, remove the following lines...
data.close();
db.close();
私の最初のコードには2つの問題がありました。
最初はMisterSquonkが指摘したように、カーソルとデータベースを早めに閉じます。
2つ目は、データをビューに正しくバインドすることでした。
ここに私の今働いている解決策のコードがあります
HighScoresActivity:
public class HighScoresActivity extends ListActivity {
private Cursor data;
private ScoresDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.high_scores);
db = new ScoresDatabase(this);
data = db.getHighScores();
ListAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.high_scores_entry, data,
new String[] { "level", "moves" },
new int[] { R.id.level_entry,
R.id.moves_entry });
setListAdapter(adapter);
}
@Override
protected void onDestroy() {
super.onDestroy();
data.close();
db.close();
}
}
high_scores.xml:
<?xml version="1.0" encoding="utf-8"?>
high_scores_entry.xml:
<?xml version="1.0" encoding="utf-8"?>
最初にデータをバインドした方法は意味をなさない。