2014-12-29 2 views
-2

я новичок в андроида я сделать приложение для вставки данных в SQLite базы данных и б есть исключения нулевого указателя при добавить запись в базу данныхNull Pointer исключения при вставке фото к БД в андроиде

эти код получить ПИК из ImageView и преобразовать его в растровом затем байты, чтобы сохранить его любых предлагает, чтобы избежать этого исключения здесь кода

  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); 

    } 

и там является создание БД

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

Благодаря

+0

Может ли мы увидеть выход ошибки? –

+1

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-FIX-он) – njzk2

+0

Е/AndroidRuntime (15303): неустранимое: Основной Е/AndroidRuntime (15303): java.lang.NullPointerException Х/AndroidRuntime (15303): \t в android.graphics.Bitmap.createBitmap (Bitmap.java:571) E/AndroidRuntime (15303): \t в com.techblogon.loginexample.SignUPActivity $ 1.onClick (SignUPActivity.java:91) E/AndroidRuntime (15303): \t в android.view.View.performClick (View.java:2532) вот ошибка – BOB91

ответ

0

использовать этот класс для преобразования растрового изображения в ByteArray,:

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; 
} 

Затем, чтобы получить свою фотографию, после запроса вы можете использовать обратную процедуру, иначе превратить вашу строку-е изд изображение в Bitmap!

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

ребят нулевого исключения указателя, потому что getDrawingCache всегда возвращают нуль

, чтобы избежать этой ошибки я использовать этот метод

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; 
    } 

спасибо за руководство меня :)

Смежные вопросы