2015-11-10 4 views
1

Я вставил изображение захвата с помощью кода ниже и получаю "not null", который указывает, что данные не равны нулю.Приложение разбилось при извлечении изображения

 button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 

       if ((name != null && name.trim().length() > 0) && (result != null && result.trim().length() > 0)) { 
        // Toast.makeText(getActivity().getApplicationContext(), fk+"", Toast.LENGTH_LONG).show(); 
        byte[] data=getBitmapAsByteArray(Global.img); // this is a function 
        if(data==null) 
        { 
         Toast.makeText(getActivity(), "null", Toast.LENGTH_LONG).show(); 
        } 
        else 
        { 


         Toast.makeText(getActivity(), " not null", Toast.LENGTH_LONG).show(); 
         SB.insertStaffBenefit(name, data, description, result, fk); 
        } 
       } 

     }); 
     return claims; 
    } 
public static byte[] getBitmapAsByteArray(Bitmap bitmap) 
{ 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, outputStream); 
    return outputStream.toByteArray(); 
} 

Однако приложение пыталось извлечь захваченное изображение.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.receipt); 
    dbHelper = new MyDatabaseHelper(this); 
    final String k = getIntent().getExtras().getString("ID"); 
    Toast.makeText(getApplicationContext(), k+"", Toast.LENGTH_LONG).show(); 
    ImageView a=(ImageView)findViewById(R.id.imageView5); 
    database = dbHelper.getWritableDatabase(); 
    c = database.rawQuery("SELECT s.Image FROM Information i LEFT JOIN StaffBenefit s ON s.Twd_id=i._id WHERE i._id=? ", new String[]{String.valueOf(k)},null); 
       if(c.moveToFirst()) 
         { 
         byte[] img=c.getBlob(c.getColumnIndexOrThrow("Image")); 
         if(img!=null) 
         { 
          Log.e("TAG", " Not null"); 
         } 
         else 
         { 
          Log.e("TAG", " null"); 
         } 
         ByteArrayInputStream imageStream = new ByteArrayInputStream(img); 
         Bitmap theImage= BitmapFactory.decodeStream(imageStream); 
         a.setImageBitmap(theImage); 

        } 

       c.close(); 
      } 
     } 

MyDatabaseHelper.java

public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table " + TABLE_STAFF_BENEFIT + "(" + ID3 + " INTEGER PRIMARY KEY , Claim_Type TEXT, Image BLOB, Description TEXT , Amount TEXT, Twd_id INTEGER, FOREIGN KEY(Twd_id) REFERENCES "+TABLE_INFO+"(_id))"); 
} 

Вызванный: java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец 0 от CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно . на android.database.CursorWindow.nativeGetBlob (нативный метод) на android.database.CursorWindow.getBlob (CursorWindow.java:404) в android.database.AbstractWindowedCursor.getBlob (AbstractWindowedCursor.java:45) в com.example .project.project.Receipt.onCreate (Receipt.java:40)

(Receipt.java:40)

byte[] img=c.getBlob(c.getColumnIndexOrThrow("Image")); 

ли, как указано в Retrieve large blob from Android sqlite database ошибка вызвана большим сгустка? Как я могу это решить? Thanks

+0

@Hoo Не могли бы вы опубликовать ваш запрос создать таблицу? – Amsheer

+0

@ Amsheer уверен. См. Отредактированный. Я просто покажу вам таблицу, состоящую из столбца «image column» – Hoo

+0

@Amsheer. В моем приложении функция камеры может поддерживать «выбранное изображение из галереи» и «брать фотографию». Загруженное изображение, выбранное из галереи, может быть восстановлено, но «захваченное изображение» не может. – Hoo

ответ

0

Я думаю, вы нашли решение самостоятельно.

Знаете ли вы, насколько велика изображение/изображения в onClick-Handler? Если они больше 1 Мб, вы не можете хранить информацию в одном курсоре. См. Свою собственную ссылку для решения.

Но, возможно, вы можете проверить его первым, если это возможно. Попробуйте вставить/выбрать изображение размером менее 1 Мб, а затем изображение с размером выше 1 Мб.

Если первый тест успешно, а второй нет, вы должны следовать решения, как в вашем посте: Retrieve large blob from Android sqlite database

+0

Как узнать размер захваченного изображения? – Hoo

+0

байт [] data = getBitmapAsByteArray (глобальный.IMG); В этой строке вы сохраняете захваченное изображение в локальном массиве Byte [], верно? Если это так, получите длину/размер массива и просто вычислите размер в Mb –

+0

ok ... Я сейчас обработаю его – Hoo

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