簡體   English   中英

如何使用Intent.putParcelableArrayListExtra()方法和Parcelable接口,我只想在兩個活動之間傳輸數據

[英]How to use Intent.putParcelableArrayListExtra() method and the Parcelable interface, I just want to transfer data in between two activity

看看我的代碼,其中有錯誤。

活動一:

Intent intent = new Intent(SendActivity.this, PickContactsActivity.class);
startActivityForResult(intent, 20);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        ArrayList<PickBean> cons = data.getParcelableArrayListExtra("data");
        for (int i = 0; i < cons.size(); i++) {
            JLog.e(LOG_TAG, "displayName:" + cons.get(i).displayName + "displayNumber" + cons.get(i).displayNumber);
        }
    }
}

活動二:

Intent data = new Intent();
ArrayList<PickBean> cons = new ArrayList<PickBean>();
for (int i = 0; i < conData.size(); i++) {
        cons.add(new PickBean(conData.get(i).displayName, conData.get(i).displayNumber));
    }
}
data.putParcelableArrayListExtra("data", cons);
setResult(RESULT_OK, data);
finish();

PickBean代碼:

public class PickBean implements Parcelable {
    public String displayName;
    public String displayNumber;

    public boolean selected = false;

    public PickBean() {
        super();
    }

    public PickBean(String displayName, String displayNumber) {
        super();
        this.displayName = displayName;
        this.displayNumber = displayNumber;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(displayName);
        dest.writeString(displayNumber);
    }


    public final Parcelable.Creator<PickBean> CREATOR = new Parcelable.Creator<PickBean>() { 
        @Override 
        public PickBean createFromParcel(Parcel source) { 

            return new PickBean(source.readString(), source.readString()); 
        } 

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

它會一直拋出

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=20,
result=-1, data=Intent { (has extras) }} to activity 
{com.chishacai.smscenter/com.chishacai.smscenter.SendActivity}: java.lang.NullPointerException: expected receiver of type 

com.chishacai.smscenter.bean.PickBean,但得到了null

Caused by: java.lang.NullPointerException: expected receiver of type 
com.chishacai.smscenter.bean.PickBean, but got null

請幫我解決這個問題,謝謝。

傳遞數據

Intent intent = new Intent(SendActivity.this, PickContactsActivity.class); 
Bundle bundle;
bundle.putParcelableArrayList("data", cons); // Be sure con is not null here
intent.putExtras(bundle);

獲取數據

 ArrayList<PickBean> arrayParents = intent.getParcelableArrayListExtra("data");

將您的方法newArray替換為:

 public final Parcelable.Creator<PickBean> CREATOR = new Parcelable.Creator<PickBean>() { 
        @Override 
        public PickBean createFromParcel(Parcel source) { 

            return new PickBean(source); 
        } 

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

 public PickBean(Parcel data) {

        this.displayName = data.readString();
        this.displayNumber = data.readString();
 }
//DataModel Class
 package com.DEECOUP.DataModel;


import android.os.Parcel;
import android.os.Parcelable;

public class OrderedData implements Parcelable {

private String _title, _subtitle, _person_type, _processed_name;
private Integer _price, _quantity;

public OrderedData(String title,  String subtitle , String person_type, String processed_name,
        Integer price, Integer quantity)
{
    _title = title;
    _subtitle =subtitle ; 
    _person_type = person_type;
    _processed_name = processed_name;
    _price = price;
    _quantity = quantity;
}


public OrderedData(Parcel in) {
    // TODO Auto-generated constructor stub

    String[] data = new String[6];

     in.readStringArray(data);
        _title = data[0];
        _subtitle =  data[1];
        _person_type=  data[2];
        _processed_name =  data[3];
        _price =  Integer.parseInt(data[4]);
        _quantity = Integer.parseInt(data[5]);
}


public String getTitle()
{
    return _title; 
}

public String getSubTitle()
{
    return _subtitle; 
}

public String getPersonType()
{
    return _person_type; 
}

public String getProcessedName()
{
    return _processed_name; 
}

public Integer getPrice()
{
    return _price; 
}

public Integer getQuantity()
{
    return _quantity; 
}


@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}


@Override
public void writeToParcel(Parcel dest, int flags) {
     dest.writeStringArray(new String[] {
                this._title,
                this._subtitle,
                this._person_type,
                this._processed_name,
                String.valueOf(this._price),
                String.valueOf(this._quantity)
            });
}


public static final Parcelable.Creator<OrderedData> CREATOR = new Parcelable.Creator<OrderedData>() {
    public OrderedData createFromParcel(Parcel in) {

         return new OrderedData(in); 
    }

    public OrderedData[] newArray(int size) {
        return new OrderedData[size];
    }
};
}

//button click to send data on second activity
case R.id.btnOrderDetails:
        Intent intent = new Intent(SenderActiviry.this,
                RecieverActivity.class);
        intent.putParcelableArrayListExtra("data", orderedDataList);
        startActivity(intent);
        break;

   //  Add data to datamodel from first addtivity
global list
ArrayList<OrderedData> orderedDataList = new ArrayList<OrderedData>();

   and in on create
  orderedDataList.add(new OrderedData(_title, _subTitle,_person_Type,   _processName,_pRice,getFinalQuantity));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM