0

これは私が持っているものですが、テーブルが存在しないと言って失敗しました。誰かがそれを求めた場合に備えて、私はそれが正しいと確信しています。しかし、これはそれを行うコードの一部です。

何と呼ばれるか


/*Constants*/
public static final String AUTHORITY = "content://com.smartcal.eventprovider";
private static final int EVENTS_INFO = 1;
baseUri = Uri.withAppendedPath(baseUri, "events_info");
    return new CursorLoader(this, baseUri, args.getStringArray("projection"), 
            args.getString("selection"), args.getStringArray("selectionArgs"), args.getBoolean("sortOrder") ? args.getString("sortOrder") : null );

一致するものは何ですか


private String getTable(Uri uri) {
    String table = "";
    switch(sUriMatcher.match(uri)){
    case EVENTS_INFO: table = "events_info";
    }
    return table;
}

private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static
{
    sUriMatcher.addURI(AUTHORITY, "events_info", 1);

}

そしてquery()カスタムでの私の方法ContentProvider


@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    database = openHelper.getWritableDatabase();

    return database.query(getTable(uri), projection, selection, selectionArgs, null, null, null);
}

エラー:


06-19 17:34:14.366: E/AndroidRuntime(686): Caused by: 
java.lang.IllegalStateException: Invalid tables

編集:

アレックスを使用しているときIllegalArgumentException、これは私がエラーから得たものです:

06-19 19:17:42.277: E/AndroidRuntime(1134): Caused by: 
java.lang.IllegalArgumentException: Unknown URI
content://com.smartcal.eventprovider/events_info

お分かりのように、sUriMatcher.addURI()メソッドが正しく機能していると仮定すると、一致するはずです。

4

2 に答える 2

2

あなたの問題はあなたのコードがあまりよく組織化されていないという事実から生じるかもしれません...

初めにすること、

private String getTable(Uri uri) {
    switch(sUriMatcher.match(uri)) {
        case EVENTS_INFO: 
            return "events_info"; // return

        /** PROVIDE A DEFAULT CASE HERE **/
        default:
           // If the URI doesn't match any of the known patterns, throw an exception.
           throw new IllegalArgumentException("Unknown URI " + uri);
    }
}

第二に、

/** Use constants, not raw ints **/
sUriMatcher.addURI(AUTHORITY, "events_info", EVENT_INFO);

それ以外に、さらに情報を提供することをお勧めします。

于 2012-06-19T22:32:44.180 に答える
0

すでにアプリをインストールしていて、テーブルは新しいですか?その場合、SQLヘルパークラスのスキーマを更新していない場合は、最初にアプリをアンインストールする必要があります。次に、エミュレータデバイスにアプリをインストールします。dbは一度だけ作成され、新しいビルド/ apkをインストールまたは実行している場合でも、SQLヘルパーのcreateメソッドはそれ以降は呼び出されません。

于 2012-06-19T22:09:06.573 に答える