Как я могу передать изображение кликнул другому классу - PullRequest
0 голосов
/ 07 марта 2012

У меня есть проблема, которую я не могу решить на данный момент, эта проблема может быть очень простой для некоторых из вас, но я действительно не могу продолжать дальше. Я временно храню объекты из базы данных в массиве List и могу отображать эти объекты в своем приложении в виде списка. Однако мне нужно передать только пункт, выбранный щелчком, в другое действие. Я попытался передать это следующим образом.

            ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener(){


      public void onItemClick(AdapterView<?>  parent,          
                View view,int position, long id) {
        // TODO Auto-generated method stub
        Intent in = new Intent(getApplicationContext(),
        Property.class);


        in.putExtra("temp_image", image);       
        in.putExtra("temp_identifier", identif);    
        in.putExtra("temp_bedrooms", bedrooms);     
        in.putExtra("temp_address", address);   
        in.putExtra("temp_propType", propType);
        startActivity(in);

        }});

И получение от другой Деятельности

        identif = getIntent().getExtras().getStringArrayList("temp_identifier");
    bedrooms = getIntent().getExtras().getStringArrayList("temp_bedrooms");
    address = getIntent().getExtras().getStringArrayList("temp_address");
    propType = getIntent().getExtras().getStringArrayList("temp_propType");
    image = getIntent().getExtras().getParcelable("temp_image");

            img = (ImageView) view.findViewById(R.id.image);    
            img.setImageBitmap(BitmapFactory.decodeByteArray(
                image.get(POSITION), 0,    
                                    image.get(POSITION).length));

Выполнение вышеизложенного имеет два недостатка.

1) Возвращает объекты списка массивов (только текст)

2) Я не могу передать изображение

Как показать только выбранный элемент списка массивов и отобразить его в другом упражнении.

Отредактированная версия: сильный текст

  **Here is how i'm querying the images!** 



          private void getDataAndPopulate() {
    // TODO Auto-generated method stub
    image = new ArrayList<byte[]>();
    identif = new ArrayList<String>();
    price= new ArrayList<String>();
    bedrooms= new ArrayList<String>();
    address= new ArrayList<String>();
    propType= new ArrayList<String>();

    Cursor cursor = getEvents(" gall,properties where  properties._id = 
        gall._id " );
    //Select* from gall,properties where properties.propertyId = gall.GallId
    while (cursor.moveToNext()) {
        String temp_id = cursor.getString(0);
        byte[] temp_image = cursor.getBlob(2);
        String temp_identifier = cursor.getString(1);
        String temp_price = cursor.getString(3);
        String temp_bedrooms = cursor.getString(4);
        String temp_address = cursor.getString(5);
        String temp_propType = cursor.getString(6);


        image.add(temp_image);
        identif.add(temp_identifier);
        price.add(temp_price);
        bedrooms.add(temp_bedrooms);
        address.add(temp_address);
        propType.add(temp_propType);


           } 

и getDataAndPopulate () равен

            private Cursor getEvents(String table) {
    SQLiteDatabase db = (placeData).getReadableDatabase();
    Cursor cursor = db.query(table, null, null, null, null, null, null);    
    return cursor;

}

Здесь я подношу их к адаптеру.

     String[] identifierArray = (String[]) identif.toArray(new String[identif
                                                                    .size()]);
     ItemsAdapter itemsAdapter = new ItemsAdapter(Result.this,
   R.layout.item, identifierArray);
   setListAdapter(itemsAdapter);

Заранее спасибо

Ответы [ 5 ]

1 голос
/ 08 марта 2012

Пакет имеет очень маленький лимит, поэтому вы получаете Неудачная операция связывания , вы пытаетесь передать слишком много растровых изображений, которые превышают максимальный размер пакета.Поскольку вы получаете это из базы данных, почему бы не передать первичные ключи изображений и снова извлечь изображение из базы данных из следующего действия?

0 голосов
/ 07 марта 2012

Через намерение Вы можете передать Сериализуемый Только объекты.

Классы Image / Drawable не являются Сериализуемыми. Таким образом, вы не можете передать их через Intent напрямую.

Я думаю, что эта ссылка имеет лучшее решение:

как-сделай вы миновать-образы-битовые-между-андроида-деятельности, использующие-пакеты

0 голосов
/ 07 марта 2012

Получите растровое изображение с помощью BitmapFactory, затем используйте intent.putExtra () и поместите это растровое изображение.В следующем упражнении получите это растровое изображение с помощью getIntent (). GetParcelableExtra () и затем установите это растровое изображение на изображение с помощью image.setImageBitmap ().

0 голосов
/ 07 марта 2012

Преобразование изображения в строку base64, отправленное через намерение, а затем снова преобразование строки в файл растрового изображения, это поможет, работает для меня

0 голосов
/ 07 марта 2012

Растровое изображение s являются Parcelable, поэтому вы можете отправить их в качестве дополнений. Чтобы получить растровое изображение из вашего рисованного объекта, используйте следующий код:

if(myImage instanceof BitmapDrawable) { // myImage is a Drawable
    BitmapDrawable bitmapDrawable = (BitmapDrawable) myImage;
    Bitmap bedroomBitmap = bitmapDrawable.getBitmap();

    Intent intent = new Intent();
    intent.putExtra("bedroom", bedroomBitmap);

    ...
}

Для преобразования вашего байта [] используйте это:

Bitmap bedroomBitmap = BitmapFactory.decodeByteArray(bedroomBytes, 0, bedroomBytes.length);
intent.putExtra("bedroom", bedroomBitmap);
...