2013-11-12 4 views
0

В моем приложении Android есть изображение. Мне нужно получить это изображение и сохранить его в базе данных sqlite. Я попытался получить uri изображения и сохранить его в базе данных. Я использовал следующий сегмент кода, чтобы получить uri изображения.Android: ошибка в получении URI изображения

// get byte array from image view 
     Drawable d = image.getBackground(); 
     BitmapDrawable bitDw = ((BitmapDrawable) d); 
     Bitmap bitmap = bitDw.getBitmap(); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
     byte[] imageInByte = stream.toByteArray(); 

     //get URI from byte array 
     String path = null; 
     try { 
      path = Images.Media.insertImage(getContentResolver(), imageInByte.toString(), 
        "title", null); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Uri imageUri = Uri.parse(path); 

     String uriString = imageUri.toString() ; 
     System.out.println(uriString); 

     ContentValues values = new ContentValues(); 
     values.put(COLUMN_PROFILE_PICTURE, uriString); 

Но войти кошка говорит

11-12 06:54:21.028: E/AndroidRuntime(863): FATAL EXCEPTION: main 
11-12 06:54:21.028: E/AndroidRuntime(863): java.lang.ClassCastException: android.graphics.drawable.GradientDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 

Ошибка указывает на этой линии.

BitmapDrawable bitDw = ((BitmapDrawable) d); 
+0

Попробуйте преобразовать непосредственно 'Bitmap растровый = ((BitmapDrawable) г) .getBitmap();' –

+0

@RethinavelPillai Я пытался. Но у меня такая же ошибка – Rose18

ответ

1

Проблема указанной в ClassCastException, вы не можете бросить GradientDrawable в BitmapDrawable.

Вот обходной путь для этого:

... 

    Drawable d = image.getBackground(); 
    GradientDrawable bitDw = ((GradientDrawable) d); // the correct cast 

    // create a temporary Bitmap and let the GradientDrawable draw on it instead 
    Bitmap bitmap = Bitmap.createBitmap(image.getWidth(), 
      image.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    bitDw.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    bitDw.draw(canvas); 

    // Bitmap bitmap = bitDw.getBitmap(); // obsoleted code 

    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
    byte[] imageInByte = stream.toByteArray(); 

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