2014-12-29 21 views
-2

分貝的android我是做一個應用程序在SQLite數據庫中插入數據和ii有一個空指針異常時記錄添加到數據庫空指針異常時嵌入照片中的Android

這個初學者代碼得到的ImageView的PIC,並將其轉換再到位圖以字節來保存 任何建議,以避免此異常 這裏是代碼

  imageView1.setDrawingCacheEnabled(true); 
      imageView1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 


      imageView1.layout(0, 0, imageView1.getMeasuredWidth(), imageView1.getMeasuredHeight()); 

      imageView1.buildDrawingCache(true); 

      Bitmap b = Bitmap.createBitmap(imageView1.getDrawingCache()); 
      imageView1.setDrawingCacheEnabled(false); 

      save_picture=loginDataBaseAdapter.getBytes(b); 


      loginDataBaseAdapter.insertEntry(userName, password, save_picture); 
      Toast.makeText(getApplicationContext(), "Record created ", Toast.LENGTH_LONG).show();`} 

有轉換位爲字節的方法

// convert from bitmap to byte array 
    public byte[] getBytes(Bitmap bitmap) { 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(CompressFormat.PNG, 0, stream); 
     return stream.toByteArray(); 
    } 

並沒有插入方法

public void insertEntry(String userName,String password , byte[] photo ) 
    { 
     ContentValues newValues = new ContentValues(); 
     // Assign values for each row. 
     newValues.put("USERNAME", userName); 
     newValues.put("PASSWORD",password); 
     newValues.put("Photo", photo); 

     // Insert the row into your table 
     db.insert("LOGIN", null, newValues); 

    } 

和存在的DB創建

static final String DATABASE_CREATE = "create table "+"LOGIN"+ 
           "(" +"ID"+" integer primary key autoincrement,"+ "USERNAME text,PASSWORD text, Photo blob not null); "; 

感謝

+0

我們能看到錯誤輸出? –

+1

可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-fix-it) – njzk2

+0

E/AndroidRuntime(15303):致命例外:main E/AndroidRuntime(15303):java.lang.NullPointerException E/AndroidRuntime(15303):\t at android.graphics.Bitmap.createBitmap( Bitmap.java:571) E/AndroidRuntime(15303):\t at com.techblogon.loginexample.SignUPActivity $ 1.onClick(SignUPActivity.java:91) E/AndroidRuntime(15303):\t at android.view.View.performClick (View.java:2532) 這裏是錯誤 – BOB91

回答

0

使用此類位圖轉換爲字節組:

public class Utility { 
// convert from bitmap to byte array 
public static byte[] getBytes(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(CompressFormat.PNG, 0, stream); 
    return stream.toByteArray(); 
} 

// convert from byte array to bitmap 
public static Bitmap getPhoto(byte[] image) { 
    return BitmapFactory.decodeByteArray(image, 0, image.length); 
} 

} ,進入InsertEntry方法:

newValues.put(G_PHOTO, Utility.getBytes(image)); 
0

嘗試保存一個Base64格式的字符串位圖,然後將其插入到數據庫中。 所以,你的getBytes方法將getBase64Picture,將是這樣的:

public String getBase64StrFromPicture(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(CompressFormat.PNG, 0, stream); 
    String imageEncoded = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT); 
    return imageEncoded; 
} 

然後,檢索您的圖片,在查詢之後,你可以使用反向的過程,又名改變你的字符串編輯圖片爲位圖!

public Bitmap getBitmapFromBase64Str(){ 
    byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE); 
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    return decodedByte; 
} 
0

傢伙空指針異常,因爲getDrawingCache總是返回null

避免這種錯誤我用這個方法

public static Bitmap loadBitmapFromView(View v) { 
      Bitmap bi = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);     
      Canvas c = new Canvas(bi); 
      v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); 
      v.draw(c); 
      return bi; 
    } 

感謝指導我:)