2016-04-12 24 views
0

ArrayListIntent aracılığıyla başka bir etkinliğe geçmek istiyorum. Ancak, kod hata vermez ancak Liste her zaman boştur. Neyi yanlış yaptığımı biliyor musun? tyParcelable ArrayList her zaman boş

Activity1

private ArrayList<ResimBean> rbList = new ArrayList<ResimBean>(); 



       Bitmap bmp = (Bitmap) data.getExtras().get("data"); 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] thumbArray = stream.toByteArray(); 
       Uri selectedImageUri = data.getData(); 
       String fotopath = getRealPathFromURI(selectedImageUri); 
       ResimBean rb = new ResimBean(Parcel.obtain()); 
       // rb.setResim(bar); 
       rb.setThumbnail(thumbArray); 
       rb.setPath(fotopath); 
       rbList.add(rb); 
    Intent intent = new Intent(getApplicationContext(), ResimListActivity.class); 
    intent.putParcelableArrayListExtra("reslist",rbList); 
    startActivityForResult(intent, 100); 

Activity2

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    try { 
     Intent i = getIntent(); 
     ArrayList<ResimBean> rbList = i.getParcelableArrayListExtra("reslist"); 
    } catch (Exception ex) { 
     String msg = ex.getMessage(); 
    } 
} 

Onun herhangi bir hata vermiyor ama liste her zaman boştur.

DÜZENLEME

Eklendi i listede doldurmak nasıl kodu. Benim Parcelable sınıfın ya da ne yanlış

DÜZENLEME 2 şey?

public class ResimBean implements Parcelable { 
private int Id; 
private int HataBildirimId; 
private byte[] Resim; 
private byte[] Thumbnail; 
public byte[] getThumbnail() { 
    return Thumbnail; 
} 

public void setThumbnail(byte[] thumbnail) { 
    Thumbnail = thumbnail; 
} 

private String Path; 

public String getPath() { 
    return Path; 
} 

public void setPath(String path) { 
    Path = path; 
} 

public int getHataBildirimId() { 
    return HataBildirimId; 
} 

public void setHataBildirimId(int hataBildirimId) { 
    HataBildirimId = hataBildirimId; 
} 

public int getId() { 
    return Id; 
} 

public void setId(int id) { 
    Id = id; 
} 

public byte[] getResim() { 
    return Resim; 
} 

public void setResim(byte[] resim) { 
    Resim = resim; 
} 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(HataBildirimId); 
    dest.writeByteArray(Resim); 
    dest.writeByteArray(Thumbnail); 

} 
public ResimBean(Parcel in) { 
    readFromParcel(in); 
} 

public void readFromParcel(Parcel in){ 
    this.HataBildirimId = in.readInt(); 
    this.Resim = new byte[in.readInt()]; 
    this.Thumbnail = new byte[in.readInt()]; 
} 

public static final Parcelable.Creator<ResimBean> CREATOR = new Parcelable.Creator<ResimBean>() { 
    @Override 
    public ResimBean createFromParcel(Parcel in) { 
     return new ResimBean(in); 
    } 

    @Override 
    public ResimBean[] newArray(int size) { 
     return new ResimBean[size]; 
    } 
}; 
+0

Örneğin göndermeden önce oluşturulan listeye hiçbir şey eklemiyorsunuz, örneğin bir tarih eklemelisiniz. Özel ArrayList rbList = new ArrayList (); rbList .add (yeni ResimBrean()); –

+1

'rbList = new ArrayList ()' boş bir liste oluşturur. Bunu doldurmamanız için neden bir şey içermesini bekliyorsunuz? – Blackbelt

+0

@FarazAhmed liste boş değil. Sadece bütün kod yazdı –

cevap

0

Bu öğretici takip edebilirsiniz: http://aryo.lecture.ub.ac.id/android-passing-arraylist-of-object-within-an-intent/

Ben Activity2 boyutunda rbList ile bu

Bundle extras = this.getIntent().getExtras(); 
     if (extras != null) { 
      try { 
       Intent i = getIntent(); 
       ArrayList<ResimBean> rbList = (ArrayList<ResimBean>) i.getExtras().get("reslist"); 
       Log.i("mytag", " "+i.getExtras().get("reslist").toString()); 
       Log.i("mytag", " "+rbList.get(0).toString()); 
      } catch (Exception ex) { 
       String msg = ex.getMessage(); 
      } 
     } 

gibi çalışan var = Ben boyutunu başlamıştı senin kod ile 1, = 0

+0

Liste isnt empty Sadece kodu nasıl eklediğimi ekledim. Güncellenmiş kodumu kontrol et. Bu konuda onu –

0

Gösterme şekliniz, yeni bir ArrayList <> oluşturup extr olarak boş gönderirsiniz Bir sonraki faaliyete yönelik bir niyet.

ArrayList'inizi tam olarak nerede barındırıyorsunuz?

Böyle bir şey yapmalıdır:

private ArrayList<ResimBean> rbList = new ArrayList<ResimBean>(); 

//populate rbList using adapter, then call intent 

Intent intent = new Intent(getApplicationContext(), ResimListActivity.class); 
intent.putParcelableArrayListExtra("reslist",rbList); 
startActivityForResult(intent, 100); 

Aksi takdirde, rbList hep boş olacaktır ekstra gönderin. Kulağa apaçık geliyor ama nasıl yaptığınızı bilmiyorum, bu benim en iyi tahminim.

+0

ile paylaştım Soruyu doldurulan bir kodla güncelledim. –

+0

Bu cevaba bir bakın: [burada] (http://stackoverflow.com/questions/1626667/how-to-use-parcel-in-android). Bu size yardımcı olabilir. Parcel.obtain() parametresini parametre olarak kullanarak yeni bir nesne oluşturmanız gerektiğini düşünmüyorum. burada: –

İlgili konular