0

sqlite データベースからスピナーを作成しようとしています。データベースは +400mb で、SD カードの /data/data/myapplicationpackage/databases ディレクトリに手動でドロップしました。

データにアクセスするための ContentProvider もあります。コードの関連部分を次に示します。

private static final String DATABASE_NAME = "mydb.db";
private static final int DATABASE_VERSION = 1;
private static final String DOSIS_PA_TABLE = "mytable";

public static final String KEY_ID_PA = "_id";
public static final String KEY_DESCRIPTION = "description";


public static final String CONTENT_AUTHORITY = "com.mypackage.myappname";
public static final Uri BASE_CONTENT_URI = Uri.parse("content://"
        + CONTENT_AUTHORITY);

private static final String PATH_DOSISPED_PA = "mytable";

public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon()
        .appendPath(PATH_DOSISPED_PA).build();

public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.myappname.mytable";
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.myappname.mytable";

private static final int DOSISPAS = 1;
private static final int DOSISPA_ID = 2;

private static final UriMatcher uriMatcher;
static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI("CONTENT_AUTHORITY", "mytable", DOSISPAS);
    uriMatcher.addURI("CONTENT_AUTHORITY", "mytable/*", DOSISPA_ID);
}

これは、クエリをトリガーするアクティビティの一部です。

contentResolver = getContentResolver();
    Uri uri = MyContentProvider.CONTENT_URI;
    Cursor cursor = contentResolver.query(uri, null, null, null, null);

    // create an array to specify which fields we want to display
    String[] from = new String[] { MyContentProvider.KEY_DESCRIPTION };
    // create an array of the display item we want to bind our data to
    int[] to = new int[] { android.R.id.text1 };
    // create simple cursor adapter
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_spinner_item, cursor, from, to);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // get reference to our spinner
    Spinner spinner = (Spinner) findViewById(R.id.spinner_pas);
    spinner.setAdapter(adapter);//THIS IS WHERE THE EXCEPTION IS THRWON

そして、次のコード行で NullPointerException がスローされます。

    spinner.setAdapter(adapter);

そして、ここにlogcatがあります:

10-02 18:41:32.109: E/AndroidRuntime(2783): FATAL EXCEPTION: main
10-02 18:41:32.109: E/AndroidRuntime(2783): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.edoctores.android.apps.idoctus/com.edoctores.android.apps.idoctus.ui.PediatricDosisActivity}: java.lang.NullPointerException
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.os.Looper.loop(Looper.java:137)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at java.lang.reflect.Method.invokeNative(Native Method)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at java.lang.reflect.Method.invoke(Method.java:511)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at dalvik.system.NativeStart.main(Native Method)
10-02 18:41:32.109: E/AndroidRuntime(2783): Caused by: java.lang.NullPointerException
10-02 18:41:32.109: E/AndroidRuntime(2783):     at com.edoctores.android.apps.idoctus.ui.PediatricDosisActivity.onCreate(PediatricDosisActivity.java:72)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.Activity.performCreate(Activity.java:5008)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
10-02 18:41:32.109: E/AndroidRuntime(2783):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
10-02 18:41:32.109: E/AndroidRuntime(2783):     ... 11 more

私は一日中それを修正しようとしてきましたが、運がありませんでした。誰かが私を助けて、正しい方向に向けることができますか? 事前にどうもありがとう

4

1 に答える 1

1

findViewById()現在表示されている場合のみ Viewを返します。それ以外の場合は を返しますnull。渡したレイアウト (または既にインフレートされているレイアウト)に id を持つ Spinnerが必要です。spinner_passetContentView()

于 2012-10-02T17:01:46.097 に答える