2017-07-25 25 views
0

このコードで挿入新しいデータ:アプリケーションがクラッシュしたときのContentProvider

insertContentProviderの場合:

ContentValues values = new ContentValues(); 
    values.put(DogEntry.NAME, "Doggy"); 
    values.put(DogEntry.BREED, "Dingo"); 
    values.put(DogEntry.GENDER, DogEntry.GENDER_MALE); 
    values.put(DogEntry.WEIGHT, 15); 
    Uri newUri = getContentResolver().insert(DogEntry.CONTENT_URI,values); 

注:私はデータを挿入する場所を

public Uri insert(Uri uri, ContentValues contentValues) { 

    final int match = sUriMatcher.match(uri); 
    switch (match) { 
     case DOG: 
      insertDog(uri, contentValues); 
     default: 
      throw new IllegalArgumentException("Insertion is not supported for " + uri); 
    } 
} 

private Uri insertDog(Uri uri, ContentValues contentValues) { 

    SQLiteDatabase db = mDbHelper.getWritableDatabase(); 
    long id = db.insert(DogEntry.TABLE_NAME, null, contentValues); 
    if (id == -1) { 
     Log.e(LOG_TAG, "Failed to insert row for " + uri); 
     return null; 
    } 
    return ContentUris.withAppendedId(uri, id); 
} 

これはすべて定数であります契約クラスで定義されています。

+2

"App crashes" - LogCatを使用して、クラッシュに関連するJavaスタックトレースを調べます。https://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-この – CommonsWare

+0

@ CommonSWareでは、URIには挿入がサポートされていません。 URIは300%正確です。だから何? –

+0

アプリを再インストールする必要がある場合は、一度実行してdbスキーマを変更してください。 –

答えて

4

あなたがリターンを忘れ:

... 
case DOG: 
    return insertDog(uri, contentValues); 

説明を:スイッチが最後にすべての場合、デフォルトを通過します。 case文でbreakまたはreturnを呼び出す必要があります。

+0

あなたは天才でなければなりません。できます。ありがとう。 –

関連する問題