2016-10-25 4 views
1

私はAndroidの開発にはかなり新しく、テキストノートとチェックリスト機能を備えたメモ作成アプリを開発中です。しかし、現在私が混乱しているバグがあります。ユーザーがチェックリストに新しい項目を追加しようとすると、アプリが不要なメソッドにメソッドを転送するだけです。アンドロイドで間違ったコンテキストを取得する

私のコードで何が問題なのか分かりませんが、文脈に何かがあるかもしれません。したがって私はソースコードをここに入れて、うまくいけば誰かがそれを理解するかもしれない。 NoteContentProviderの挿入方法に

NoteEditorActivity

ChecklistManager.newInstance(NoteEditorActivity.this).create(item); 

ChecklistManager

public long create(CheckItem item) { 
    ContentValues values = new ContentValues(); 
    values.put(Constants.CL_COL_ID, item.getId()); 
    //put some data 
    Uri result = clContext.getContentResolver().insert(ChecklistContentProvider.CONTENT_URI, values); //BUG: insert command points to notecontentprovider's one 
    long id = Long.parseLong(result.getLastPathSegment()); 
    return id; 
} 

、それルートの代わりに:ありがとうご支援

ここではreleventコードは、ユーザーが項目を追加]をクリックした後でChecklistContentProviderの1つ

public Uri insert(Uri uri, ContentValues values) { 
    int type = URI_MATCHER.match(uri); 
    SQLiteDatabase db = dbHelper.getWritableDatabase(); 
    Long id; 
    switch (type){ 
     case NOTES: 
      id = db.insert(Constants.NOTES_TABLE, null, values); 
      break; 
     default: 
      throw new IllegalArgumentException("Unknown URI at notecontent: " + uri); 
    } 
    getContext().getContentResolver().notifyChange(uri, null); 
    return Uri.parse(BASE_PATH_NOTE + "/" + id); 
} 

ここにあなたのlogcatが指摘するバグ

java.lang.IllegalArgumentException: Unknown URI at notecontent: content://cmc.note.data.provider/checklist 
        at cmc.note.data.NoteContentProvider.insert(NoteContentProvider.java:88) 
        at android.content.ContentProvider$Transport.insert(ContentProvider.java) 
        at android.content.ContentResolver.insert(ContentResolver.java) 
        at cmc.note.data.ChecklistManager.create(ChecklistManager.java:43) 
        at cmc.note.activities.NoteEditorActivity$1.onClick(NoteEditorActivity.java:107) 
        at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157) 
        at android.os.Handler.dispatchMessage(Handler.java) 
        at android.os.Looper.loop(Looper.java) 
        at android.app.ActivityThread.main(ActivityThread.java) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:163) 

答えて

0

すぐに問題があります。に照会しています。 UriMatcherにはchecklistのパスに一致するものはありませんので、IllegalArgumentExceptionを投げます。

一般的に言えば、アプリケーションは1つのプロバイダのみを必要とし、URIのパスとIDから結果データを決定します。現在持っている2つのProviderクラスを1つのクラスに簡単に結合して、の設定とCRUDメソッドをマージすることができます。要求が受信されたら、マッチャーを使用してURIからアクセスする必要があるテーブルを決定し、それに応じて必要なデータベース操作を実行します。

0

は 'コンテンツ://cmc.note.data.provider/checklist' 未知のURIです。あなたのURI_MATCHERをチェックしてください、それは 'cmc.note.data.provider/checklist'を持っていないか、あなたのスイッチが間違っているかもしれません(ケースノート)

関連する問題