Im trying to develop a little android game and i'm having a hard time understanding how can i surpass this problem.
What i'm trying to do is send data between activities.To achieve that i'm using the intent extras. The data that im trying to send is an ArrayList<Item
Item.java
public abstract class Item implements Serializable {
private String fieldA;
private int fieldB;
*getters and setters*
abstract void use();
}
the use method will be different on each item so thats why im using abstract
e.g creation item
Item hpPotion = new Item() {
@Override
public void use() {
player.setHealth(player.getHealth() + 10)
}
};
and then im getting an error when starting the new Activity
Intent intent = new Intent(HistoryActivity.this,BagActivity.class);
intent.putExtra("items",player.getItems());
someActivityResultLauncher.launch(intent,options);
StackTrace:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.decisions, PID: 22018
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.decisions.HistoryActivity$7)
at android.os.Parcel.writeSerializable(Parcel.java:2116)
at android.os.Parcel.writeValue(Parcel.java:1886)
at android.os.Parcel.writeList(Parcel.java:1095)
at android.os.Parcel.writeValue(Parcel.java:1835)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:978)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1629)
at android.os.Bundle.writeToParcel(Bundle.java:1303)
at android.os.Parcel.writeBundle(Parcel.java:1047)
at android.content.Intent.writeToParcel(Intent.java:10871)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3887)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1727)
at android.app.Activity.startActivityForResult(Activity.java:5405)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:574)
at androidx.core.app.ActivityCompat.startActivityForResult(ActivityCompat.java:237)
at androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:208)
at androidx.activity.result.ActivityResultRegistry$2.launch(ActivityResultRegistry.java:166)
at com.example.decisions.HistoryActivity$2.onClick(HistoryActivity.java:96)
at android.view.View.performClick(View.java:7559)
at android.view.View.performClickInternal(View.java:7536)
at android.view.View.access$3600(View.java:828)
at android.view.View$PerformClick.run(View.java:28700)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:7861)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Caused by: java.io.NotSerializableException: com.example.decisions.HistoryActivity
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at android.os.Parcel.writeSerializable(Parcel.java:2111)
at android.os.Parcel.writeValue(Parcel.java:1886)
at android.os.Parcel.writeList(Parcel.java:1095)
at android.os.Parcel.writeValue(Parcel.java:1835)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:978)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1629)
at android.os.Bundle.writeToParcel(Bundle.java:1303)
at android.os.Parcel.writeBundle(Parcel.java:1047)
at android.content.Intent.writeToParcel(Intent.java:10871)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3887)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1727)
at android.app.Activity.startActivityForResult(Activity.java:5405)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:574)
at androidx.core.app.ActivityCompat.startActivityForResult(ActivityCompat.java:237)
at androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:208)
at androidx.activity.result.ActivityResultRegistry$2.launch(ActivityResultRegistry.java:166)
at com.example.decisions.HistoryActivity$2.onClick(HistoryActivity.java:96)
at android.view.View.performClick(View.java:7559)
at android.view.View.performClickInternal(View.java:7536)
at android.view.View.access$3600(View.java:828)
at android.view.View$PerformClick.run(View.java:28700)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:236)
```
What would be the best approach to solve my problem?
Thank you all