これは myDB クラスです //public Cursor getplaces() を見てください --- 私は正しいですか、それとも間違っていますか? そして、ListAdapterを設定したい場合、メインのActivityクラスでコーディングする方法。ご協力ありがとうございました。
パブリック クラス MyDB { protected static final String TAG = "TAG"; プライベート最終コンテキスト mContext; プライベート SQLiteDatabase mDb; プライベート MyDBhelper mDbHelper; パブリックMyDB(コンテキストコンテキスト){ this.mContext = コンテキスト; mDbHelper = 新しい MyDBhelper(mContext); } public MyDB createDatabase() が SQLException をスローする { 試す { mDbHelper.createDataBase(); } キャッチ (IOException mIOException) { Log.e(TAG, mIOException.toString() + "UnableToCreateDatabase"); throw new Error("UnableToCreateDatabase"); } これを返します。 } public MyDB open() が SQLException をスローする { 試す { mDbHelper.openDataBase(); mDbHelper.close(); mDb = mDbHelper.getReadableDatabase(); } キャッチ (SQLException mSQLException) { Log.e(TAG, mSQLException.toString()); mSQLException をスローします。 } これを返します。 } public Cursor getplaces() { カーソル c = mDb.query(Constants.DATABASE_NAME, null, null, null, null, null, null); cを返します。 } public void close() { mDbHelper.close(); } }
ListplaceActivity クラス
public ListplaceActivity は ListActivity を拡張します { プライベート スタティック MyDB mDbHelper; String[] from = new String[] { Constants.TITLE_NAME }; int[] to = new int[] {R.id.place_title}; @オーバーライド public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDbHelper = 新しい MyDB(これ); カーソル c = mDbHelper.getplaces(); setListAdapter(新しい SimpleCursorAdapter(これ、 R.layout.list_place、c、 からの)); 最終的な ListView lv = getListView(); lv.setOnItemClickListener(新しいOnItemClickListener() { public void onItemClick(AdapterView 親、ビュー ビュー、int 位置、長い ID) { Intent newActivity = new Intent(view.getContext(), Place.class); startActivity(newActivity); } }); } }
LogCat では、クリックして ListplacesActivity ページに移動すると、次のように表示され、「予期せず停止」が発生し、リストが表示されませんでした:
05-30 21:49:21.543: 情報/プロセス (17605): 信号を送信しています。PID: 17605 SIG: 9 05-30 21:49:21.583: INFO/ActivityManager(59): プロセス com.ctg (pid 17605) が停止しました。 05-30 21:49:21.593: INFO/WindowManager(59): WIN DEATH: ウィンドウ {44de90a0 com.ctg/com.ctg.CTG 一時停止 = false} 05-30 21:49:21.674: INFO/ActivityManager(59): アクティビティ com.ctg/.CTG の proc com.ctg を開始します: pid=27207 uid=10028 gids={} 05-30 21:49:21.733: エラー/gralloc(59): [登録解除] ハンドル 0x5fe9d8 がまだロックされています (状態 = 40000001) 05-30 21:49:22.103: DEBUG/ddm-heap(27207): 機能リスト要求を取得しました 05-30 21:49:22.265: INFO/UsageStats(59): com.ctg で既に再開されているにもかかわらず、予期しない com.ctg の再開 05-30 21:49:23.084: DEBUG/dalvikvm(27207): GC は 801 オブジェクト / 58520 バイトを 216 ミリ秒で解放しました 05-30 21:49:23.433: DEBUG/dalvikvm(27207): GC は 129 ミリ秒で 93 オブジェクト / 3632 バイトを解放しました 05-30 21:49:23.623: WARN/PhoneWindow(27207): 以前にフォーカスされたビューは、保存中に ID 16908298 を報告しましたが、復元中に見つかりません。 05-30 21:49:23.843: WARN/InputManagerService(59): pid 17605 uid 10028 に setActive(false) 通知を送信する RemoteException を取得しました 05-30 21:49:24.103: INFO/ActivityManager(59): 表示されたアクティビティ com.ctg/.CTG: 2489 ms (合計 33589 ms) 05-30 21:49:29.013: INFO/ActivityManager(59): 開始アクティビティ: 意図 { cmp=com.ctg/.AttractionsListActivity } 05-30 21:49:29.085: DEBUG/AndroidRuntime(27207): VM のシャットダウン 05-30 21:49:29.085: WARN/dalvikvm(27207): threadid=3: キャッチされない例外で終了するスレッド (グループ = 0x4001b188) 05-30 21:49:29.094: エラー/AndroidRuntime(27207): キャッチされていないハンドラー: キャッチされていない例外が原因でスレッド メインが終了しました 05-30 21:49:29.114: エラー/AndroidRuntime(27207): java.lang.RuntimeException: アクティビティ ComponentInfo{com.ctg/com.ctg.AttractionsListActivity} を開始できません: java.lang.NullPointerException 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2496) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2512) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.ActivityThread.access$2200 (ActivityThread.java:119) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.ActivityThread$H.handleMessage (ActivityThread.java:1863) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.os.Handler.dispatchMessage (Handler.java:99) で 05-30 21:49:29.114: エラー/AndroidRuntime(27207): android.os.Looper.loop(Looper.java:123) 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.ActivityThread.main (ActivityThread.java:4363) で 05-30 21:49:29.114: エラー/AndroidRuntime(27207): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で 05-30 21:49:29.114: エラー/AndroidRuntime(27207): java.lang.reflect.Method.invoke(Method.java:521) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:860) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): dalvik.system.NativeStart.main (ネイティブ メソッド) で 05-30 21:49:29.114: エラー/AndroidRuntime(27207): 原因: java.lang.NullPointerException 05-30 21:49:29.114: エラー/AndroidRuntime (27207): com.ctg.data.MyDB.getplaces (MyDB.java:82) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): com.ctg.AttractionsListActivity.onCreate (AttractionsListActivity.java:32) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) で 05-30 21:49:29.114: エラー/AndroidRuntime (27207): android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2459) で 05-30 21:49:29.114: エラー/AndroidRuntime(27207): ... 11 詳細 05-30 21:49:29.144: 情報/プロセス (59): 信号を送信しています。PID: 27207 SIG: 3 05-30 21:49:29.144: INFO/dalvikvm(27207): threadid=7: シグナル 3 に反応しています 05-30 21:49:29.174: INFO/dalvikvm(27207): スタック トレースを '/data/anr/traces.txt' に書き込みました 05-30 21:49:39.039: WARN/ActivityManager(59): 起動タイムアウトの期限が切れたため、ウェイク ロックが放棄されました! 05-30 21:49:39.057: WARN/ActivityManager(59): HistoryRecord{44eae320 com.ctg/.AttractionsListActivity} のアクティビティ アイドル タイムアウト