0

Вот мой SimpleCursorAdapter расширения класса, который я использую пытаюсь отобразить информацию о контактах в ListView:Недопустимая операция исключения при попытке getBlob от курсора

private class CustomContactsAdapter extends SimpleCursorAdapter { 
     private int layout; 
     private LayoutInflater inflater; 

     public CustomContactsAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { 
      super(context, layout, c, from, to, 0); 
      this.layout = layout; 
      inflater = LayoutInflater.from(context);    
     } 

     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      View v = inflater.inflate(layout, parent, false); 
      return v; 
     } 

     @Override 
     public void bindView(View v, Context context, Cursor cur) { 
      MatrixCursor c = (MatrixCursor) cur; 
      final String name = c.getString(c.getColumnIndex(COLUMN_NAME)); 
      final String org = c.getString(c.getColumnIndex(COLUMN_ORG)); 
      final byte[] image = c.getBlob(c.getColumnIndex(COLUMN_PHOTO)); 

      ImageView iv = (ImageView) v.findViewById(R.id.contact_photo); 

      if(image != null && image.length > 3) { 
       iv.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length)); 
      } 

      TextView tname = (TextView) v.findViewById(android.R.id.text1); 
      tname.setText(name); 

      TextView torg = (TextView) v.findViewById(android.R.id.text2); 
      torg.setText(org); 
     } 
    } 

Но когда программа достигает фрагмент кода, где я хочу получить данные больших двоичных объектов от курсора UnsupportedOperationException брошено там с сообщением:

getBlob не поддерживается

Я хочу знать, что я делаю неправильно. Кроме того, я передаю MatrixCursor, испеченный мною в качестве параметра адаптера.

+0

который андроид версия делает это бросает исключение? – Blackbelt

+0

Android 4.2.2 версия –

+0

у вашего устройства есть Android 4.2.2 или вы компилируете Android 4.2.2? – Blackbelt

ответ

1

Это функциональность getBlob(int) от MatrixCurosr в Android 1.6 и Android 2.3.

public byte[] getBlob(int column) { 
    throw new UnsupportedOperationException("getBlob is not supported"); 
} 

Это getBlob(int) реализация для Android ICS

@Override 
public byte[] getBlob(int column) { 
     Object value = get(column); 
     return (byte[]) value; 
} 

вероятно вы хотите подкласс MatrixCursor и implment в getBlob в ICS пути

+0

Благодарим за упоминание о подходах в разных версиях, узнаем об этом. Но, как я уже сказал, я использую Android 4.2.2 и запускаю это приложение на эмуляторе 2.3. –

+0

Где вы запускаете это то, что имеет значение (имеет смысл мое предложение) – Blackbelt

+0

Ой, я видел, что в последнее время вы добавили Android 2.3 в свой ответ, похоже, что мне действительно нужно переопределить логику «MatrixCursor» –

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