![](/img/trans.png)
[英]Pass Object implementing Parcelable from one Activity to Another Activity
[英]ClassCastException when trying to pass custom object implementing parcelable to another activity using Intent
我有自己的對象SineWave
,需要將其從SettingsActivity
傳遞給SimulationActivity
但是當我將SineWave []轉換為Parceable []時,它給出了classcastexception。
SineWave對象:-
public class SineWave implements Parcelable{
float A,k,w,phi,VELOCITY;
int waveNum;
boolean plot;
public SineWave(Parcel in){
A=in.readFloat();
k=in.readFloat();
w=in.readFloat();
phi=in.readFloat();
VELOCITY=in.readFloat();
waveNum=in.readInt();
plot=in.readInt()==1;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeFloat(A);
out.writeFloat(k);
out.writeFloat(w);
out.writeFloat(phi);
out.writeFloat(VELOCITY);
out.writeInt(waveNum);
out.writeInt(plot ? 1 : 0);
}
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public SineWave createFromParcel(Parcel in) {
return new SineWave(in);
}
public SineWave[] newArray(int size) {
return new SineWave[size];
}
};
}
設置活動:-
waveList = new ArrayList<SineWave>();
@Override
public void onClick(View view){
switch(view.getId()){
case R.id.start:
Intent i1 = new Intent();
i1.setClass(this, SimulationActivity.class);
i1.putExtra("list",(Parcelable[])(waveList.toArray()));
//Gives ClassCastException at above line
startActivity(i1);
break;
case R.id.add_wave:
...
break;
default: break;
}
}
SimulationActivity:-
public void onCreate(Bundle icicle){
...
Intent i = getIntent();
SineWave[] waveList[]=(SineWave[])i.getParcelableArrayExtra("list");
...
}
錯誤堆棧跟蹤:
Caused by: java.lang.ClassCastException: [Ljava.lang.Object;
at com.meet.simulators.wavesonstringsimulator.SettingsActivity.onClick(SettingsActivity.java:37) at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at android.view.View$1.onClick(View.java:2139)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
不明白是什么問題? 請幫忙。
您不能將對象數組(即waveList.toArray()為您提供的對象)直接轉換為其他類型的數組。 您也只需要強制轉換為SineWave,因為它已經是一個Parcelable。 我相信這是您可以做到的:
i1.putExtra("list", waveList.toArray(new SineWave[waveList.size()]));
有關信息,putExtra的文檔指出:
將擴展數據添加到該意圖。 該名稱必須包含包前綴,例如,應用程序com.android.contacts將使用“ com.android.contacts.ShowAll”之類的名稱。
我不知道可能會有什么影響,但是您可能還需要在“列表”前面添加包名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.