0

これは 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} のアクティビティ アイドル タイムアウト
4

1 に答える 1

3

を呼び出さなかったため、内部MDbHelper.open()の変数はnullです。mDbgetPlaces()

于 2011-05-30T14:56:22.590 に答える