2013-01-20 2 views
0

동일한 SQL 데이터베이스에 BLOB 및 일부 문자열로 비트 맵을 저장하려고합니다. 내가 비트 맵과 데이터베이스를 업데이트하려면이 옵션을 사용이SQLite 업데이트 Blob 오류

// 단일 접촉

public int update(String name, String email, String uid, String tel, String niver, String created_at, byte[] thumb) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, name); // Name 
    values.put(KEY_EMAIL, email); // Email 
    values.put(KEY_UID, uid); // Email 
    values.put(KEY_TEL, tel); // Telefone 
    values.put(KEY_NIVER, niver); // Niver 
    values.put(KEY_CREATED_AT, created_at); // Created At 
    values.put(KEY_THUMB, thumb); // thumb 

    //db.close(); // I deleted this line 

    // updating row 
    return db.update(TABLE_LOGIN, values, KEY_THUMB + " = ?", 
      new String[] { String.valueOf(getRowCount()) }); 
} 

업데이트; 여기

내 데이터베이스입니다

    imagebutton.setImageBitmap(photo); 
        imagebutton.setScaleType(ScaleType.FIT_XY); 
        ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
        photo.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
        byte[] imageInByte = stream.toByteArray(); 
        db.update(null, null, null, null, null, null, imageInByte); 

로그 :이 코드

01-21 15:47:47.445: E/AndroidRuntime(24673): FATAL EXCEPTION: main 
01-21 15:47:47.445: E/AndroidRuntime(24673): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65538, result=-1, data=Intent { act=inline-data (has extras) }} to activity {br.com.example.nightid/br.com.example.nightid.main.BaseSampleActivity}: java.lang.IllegalStateException: database not open 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.os.Looper.loop(Looper.java:130) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.ActivityThread.main(ActivityThread.java:3687) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at java.lang.reflect.Method.invokeNative(Native Method) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at java.lang.reflect.Method.invoke(Method.java:507) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at dalvik.system.NativeStart.main(Native Method) 
01-21 15:47:47.445: E/AndroidRuntime(24673): Caused by: java.lang.IllegalStateException: database not open 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1712) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1666) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at com.example.androidhive.library.DatabaseHandler.update(DatabaseHandler.java:150) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at br.com.example.nightid.slidingmenu.SlidingFragment.onActivityResult(SlidingFragment.java:204) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:161) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.Activity.dispatchActivityResult(Activity.java:3919) 
01-21 15:47:47.445: E/AndroidRuntime(24673): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
01-21 15:47:47.445: E/AndroidRuntime(24673): ... 11 more 
+0

코드를 단순화 할 수 있습니까? 즉,이 질문에 필요하지 않은 코드를 모두 제거하고 문제가 여전히 발생합니까? 제 생각에는 이것이 재현 할 수없는 테스트 케이스가 아닙니다 (데이터가 누락되었습니다). 추가 할 수 있습니까? –

+0

일반적인 비트 맵으로 데이터를 고려, 그 작동, 문제는 단순한에 의해 동일한 데이터베이스에 문자열과 BLOB를 추가하는 방법에 의해, 그것은 내 Constructor DatabaseHandler가 맞습니까? 덕분에 – Marckaraujo

+0

@ ThomasMueller, 어쩌면 그것의 더 분명, 감사 – Marckaraujo

답변

0

, 지금 작동합니다

public int updateUser(byte[] thumb) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_THUMB, thumb); // thumb 
     Log.w(TAG, String.valueOf(thumb)); 
     // updating row 
     return db.update(TABLE_LOGIN, values, null, 
       null); 
    } 

문자열 [] {한 String.valueOf (로 getRowCount())} 저를주고 있었다 새로운 이 오류는 logcat에 있습니다.