2013-01-03 52 views
0

我使用下面的意图来记录声音Android的录音机:android.database.sqlite.SQLiteConstraintException:错误代码19

Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 
startActivityForResult(intent, REQUEST_RECORD_SOUND); 

当代码返回到我的节目(在onActivityResult),记录不存储和日志猫显示错误。这只发生在索尼XPERIA与android 2.3版本。 任何帮助将不胜感激。 下面是logcat的输出:

01-02 21:43:17.837: E/Database(557): Error inserting album_id=8 title=2013-01-02 21:43:17 title_key=Q*?Q*?Q*?Q*?Q?Q*?Q*?Q?Q*?Q*?QQ*?Q*?QØQ*?Q*?QØQ*?Q*?Q mime_type=audio/3gpp _display_name=recording-379099974.3gpp date_modified=1357188193 date_added=1357188197 artist_id=8 is_music=0 _data=/mnt/sdcard/recording-379099974.3gpp 
01-02 21:43:17.837: E/Database(557): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 
01-02 21:43:17.837: E/Database(557): at android.database.sqlite.SQLiteStatement.native_execute(Native Method) 
01-02 21:43:17.837: E/Database(557): at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61) 
01-02 21:43:17.837: E/Database(557): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1590) 
01-02 21:43:17.837: E/Database(557): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1434) 
01-02 21:43:17.837: E/Database(557): at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:1981) 
01-02 21:43:17.837: E/Database(557): at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1800) 
01-02 21:43:17.837: E/Database(557): at android.content.ContentProvider$Transport.insert(ContentProvider.java:198) 
01-02 21:43:17.837: E/Database(557): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146) 
01-02 21:43:17.837: E/Database(557): at android.os.Binder.execTransact(Binder.java:324) 
01-02 21:43:17.837: E/Database(557): at dalvik.system.NativeStart.run(Native Method) 
01-02 21:43:18.057: E/WindowManager(1524): Activity com.android.soundrecorder.SoundRecorder has leaked window [email protected] that was originally added here 
01-02 21:43:18.057: E/WindowManager(1524): android.view.WindowLeaked: Activity com.android.soundrecorder.SoundRecorder has leaked window [email protected] that was originally added here 
01-02 21:43:18.057: E/WindowManager(1524): at android.view.ViewRoot.<init>(ViewRoot.java:267) 

回答

0

我能想到两个定位到这个问题。我相信还有其他人。

答:让插入失败通过捕获一个SQLiteException并做一些事情(或没有)。这涉及在try/catch块内使用db.insertOrThrow替换上面第2步中的db.insert方法调用。

try { 
    db.insertOrThrow(UpdateServiceDBHelper.TABLE_NAME, null, statusVals); 
     } catch (SQLException ex) { 
    // do something with ex or nothing 
    } 

简单但不太令人满意。


B.在一个IDE或其他支持API 8或更高的设备上,而不是insertOrThrow,使用insertWithOnConflict和明确指定冲突resoultion架构。

此方法调用导致冲突的行被替换。

 db.insertWithOnConflict(DBHelper.TABLE_NAME, null, insertVals, SQLiteDatabase.CONFLICT_REPLACE); 

冲突也可以忽略不计:

 db.insertWithOnConflict(DBHelper.TABLE_NAME, null, insertVals, SQLiteDatabase.CONFLICT_IGNORE); 
+0

,您好:感谢您的答复,但遗憾的是我们没有任何控制权的例外是在股票记录应用com.android被抛出。 soundrecorder.SoundRecorder。 – user899849

相关问题