2016-04-12 14 views
0

ArrayListIntentを別のアクティビティに渡したいとします。しかし、このコードではエラーは発生しませんが、Listは常に空です。私は間違って何をやっているの? TYParcelable ArrayListは常に空です

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(); 
    } 
} 

ITSはすべてのエラーを与えていないが、リストは常に空です。

EDIT

は私がリストに記入する方法のコードを追加しました。

EDIT 2 私Parcelableクラスと間違って何かまたは何?

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

送信する前に、作成したリストに何も追加しません。たとえば、次のような日付を追加する必要があります。 プライベートArrayList rbList = new ArrayList (); rbList .add(新しいResimBrean()); –

+1

'rbList = new ArrayList ()'は空のリストを作成します。あなたがそれを詰め込んでいない場合、なぜそれが何かを含むと期待しているのですか? – Blackbelt

+0

@FarazAhmedリストは空ではありません。あなたはResimBeamクラスを使用していますか? –

答えて

0

あなたはこのチュートリアルに従うことができます。 http://aryo.lecture.ub.ac.id/android-passing-arraylist-of-object-within-an-intent/

私はそれがActivity2サイズにrbListでこの

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(); 
      } 
     } 

のように働いてしまっを=私はサイズを得ていたあなたのコードでは1、 = 0

+0

リストは空ではありません。更新されたコードを確認してください。 Sry about it –

0

表示方法は、新しいArrayList <>を作成し、それをextrとして空にします次の活動へのビアの意向。

正確にArrayListを作成しますか?

あなたはこのような何か行う必要があります。そうしないと

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); 

を、あなたに余分な送信rbListは常に空になります。それは明らかですが、私はあなたがそれをやっているか分からないので、これは私の最高の推測です。

+0

私はそれを記入するコードで私の質問を更新しました。 –

+0

この回答を見て:[ここ](http://stackoverflow.com/questions/1626667/how-to-use-parcel-in-android)。それはあなたを助けるかもしれません。 Parcel.obtain()をパラメータとして使用して新しいObjectを作成する必要はありません。 ここに: –