Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用可包裹对象传递对象数组_Android - Fatal编程技术网

Android 使用可包裹对象传递对象数组

Android 使用可包裹对象传递对象数组,android,Android,我正在尝试使用Parcelable传递自定义对象的数组。我在搜索中发现了一些类似的讨论。我遵循了这些示例,但找不到对象数组的实现。我的问题是对象在新活动中变为空。 我的实现如下 我的可感知物体 public class showStatisticsObj implements Parcelable{ public String dt = null; public int totalmiles = 0; public Date date = null; p

我正在尝试使用Parcelable传递自定义对象的数组。我在搜索中发现了一些类似的讨论。我遵循了这些示例,但找不到对象数组的实现。我的问题是对象在新活动中变为空。 我的实现如下

我的可感知物体

    public class showStatisticsObj implements Parcelable{
    public String dt = null;
    public int totalmiles = 0;
    public Date date = null;

    public showStatisticsObj() { ; };

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

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public void writeToParcel(Parcel arg0, int arg1) {
        // TODO Auto-generated method stub
        arg0.writeString(dt); 
        arg0.writeInt(totalmiles);      
    }


    public void readFromParcel(Parcel in) {   
        dt = in.readString(); 
        totalmiles = in.readInt(); 
    } 

    @SuppressWarnings("rawtypes")
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
        public showStatisticsObj createFromParcel(Parcel in) 
        { 
            return new showStatisticsObj(in); 
        }   
        public showStatisticsObj[] newArray(int size) 
        { 
            return new showStatisticsObj[size]; 
        } 
    }; 

    }


    Parcelable[] passedArray = new Parcelable[totaldifferentDates];
    for (int i=0; i<totaldifferentDates; ++i) {
        passedArray[i] = showStatObj[i];
    }

    Intent displayintent = new Intent(this, DisplayStatistics.class);
    displayintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    displayintent.putExtra("bundleObj", passedArray);
    startActivity(displayintent);
但是showstatobjinsplay为空。
怎么了?请帮帮我。

我会像明德说的那样尝试改变创造者

接下来,您不需要以下代码,因为您已经有了parcelable数组(showStatisticsObj是parcelable):

最后,您可以从如下捆绑包中获得:

Parcelable[] ps = bundle.getParcelableArrayExtra();
showStatisticsObj[] uri = new showStatisticsObj[ps.length];
System.arraycopy(ps, 0, uri, 0, ps.length);
您传递了Parcelable[],因此必须在捆绑包中搜索Parcelable[],然后将其转换为showStatisticsObj[]。在java中,不能将Parcelable[]强制转换为showStatisticsObj[]


作为对代码的建议,类名应该总是以大写字母开头。因此,不是
showStatisticsObj
,而是
showStatisticsObj

,最好实现
可序列化的
接口。这比包裹容易

检查此示例:

public class Foo implements Serializable
{
    private static final long   serialVersionUID    = -459713774703414626L;
    public String               m_sName;
    public String               m_spass;
    public int                  m_iAge;
    public boolean              m_bUseAgePremissions;
}
发送

Foo MyObj=new Foo()
Bundle bData=new Bundle();
bData.putSerializable("test", MyObj);
Intent myIntent = ...
myIntent .putExtras(bData);
收到

Bundle bDataReceive = myIntent.getExtras();
Foo MyObj = (Foo)bDataReceive.getSerializable("test");

您是否初始化了showStatObjinDisplay?Android中不支持序列化,如果我们需要使用
putParcelable()
public class Foo implements Serializable
{
    private static final long   serialVersionUID    = -459713774703414626L;
    public String               m_sName;
    public String               m_spass;
    public int                  m_iAge;
    public boolean              m_bUseAgePremissions;
}
Foo MyObj=new Foo()
Bundle bData=new Bundle();
bData.putSerializable("test", MyObj);
Intent myIntent = ...
myIntent .putExtras(bData);
Bundle bDataReceive = myIntent.getExtras();
Foo MyObj = (Foo)bDataReceive.getSerializable("test");