2015-11-04 28 views
1

我需要傳遞一個包含對象與一個字符串和arraylist arraylist。我無法將陣列列表傳遞給其他活動。在Activity1中,列表包含我已驗證的值。如何通過列表的對象從一個活動到另一個

DepositBn:

package support; 

import android.os.Parcel; 
import android.os.Parcelable; 
import com.google.gson.annotations.SerializedName; 
import java.util.ArrayList; 

public class DepositBn implements Parcelable { 

private String limit; 
@SerializedName("period") 
private ArrayList<Rate> rateList; 

protected DepositBn(Parcel in) { 
    limit = in.readString(); 
} 

public String getLimit() { 
    return limit; 
} 

public void setLimit(String limit) { 
    this.limit = limit; 
} 

public ArrayList<Rate> getRateList() { 
    return rateList; 
} 

public void setRateList(ArrayList<Rate> rateList) { 
    this.rateList = rateList; 
} 

public class Rate { 
    private String rate; 

    public String getRate() { 
     return rate; 
    } 

    public void setRate(String rate) { 
     this.rate = rate; 
    } 

} 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(limit); 
} 
public static final Creator<DepositBn> CREATOR = new Creator<DepositBn>() { 
    @Override 
    public DepositBn createFromParcel(Parcel in) { 
     return new DepositBn(in); 
    } 

    @Override 
    public DepositBn[] newArray(int size) { 
     return new DepositBn[size]; 
    } 
}; 

}

在活性1:

@Override 
    protected void onPostExecute(ArrayList<DepositBn> result) { 
     super.onPostExecute(result); 
     System.out.println("result = " + result); 
     for (DepositBn depositBn : result) { 
      System.out.println("----" + depositBn.getLimit()); 
     } 
     try { 
      Intent intent = new Intent(DepositRates.this, GenericRateDisplay.class); 
      Resources res = DepositRates.this.getResources(); 

      Bundle bundle = new Bundle(); 
      bundle.putParcelableArrayList("depositBnArrayList",result); 
      bundle.putString("pageName", res.getString(R.string.domesticRates)); 
      intent.putExtras(bundle); 


      startActivity(intent); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

在活性2:

package in.co.sbm.sbmvirtual; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.util.ArrayList; 

import support.DepositBn; 

public class GenericRateDisplay extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_generic_rate_display); 

    Bundle b = this.getIntent().getExtras(); 

    ArrayList<DepositBn> depositBnArrayList = b.getParcelableArrayList("depositBnArrayList"); 
    //String pageName = b.getString("pageName"); 

    ArrayList<String> rateList = new ArrayList(); 

    for (DepositBn depositBn : depositBnArrayList) { 
     for(DepositBn.Rate rate : depositBn.getRateList()){ 
      rateList.add(rate.toString()); 
     } 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(GenericRateDisplay.this, 
      android.R.layout.simple_list_item_1, rateList); 
    ListView listView = (ListView) findViewById(R.id.genericListView); 
    listView.setAdapter(adapter); 
} 

}

+0

而不是'公共類DepositBn實現Parcelable',你可以做'公共類DepositBn實現Serializable',然後在意圖做'bundle.putExtra(「depositBnArrayList」,結果);' – Pankaj

+0

也嘗試了Serializable也和bundle.putSerializable 。有這個異常:java.lang.RuntimeException:Parcelable遇到IOException寫入可序列化的對象(名稱= support.DepositBn) –

+0

不使用'putSerializable'使用'putExtra'。 – Pankaj

回答

1

我修好了。我已經使用內部類,以及我沒有序列化,因此我無法使用putSerializable。我已經序列化了外部類和內部類,並使用了intent.putSerializable。

相關問題