Android系统。将此自定义对象传递给下一个Activity?

时间:2017-01-12 11:05:12

标签: java android

我有这个自定义对象,我想传递给另一个Activity:

public class FindRouteOutputForDisplay {
    public ArrayList<VertexDisplay> vertexDisplayArrayList;
    public ArrayList<Integer> integerArrayList;
}

我试过了,但没有用。

Intent newIntent = new Intent(FirstActivity.this, SecondActivity.class);
FindRouteOutputForDisplay data = getMyData();
newIntent.putExtra("data", data); // Error
startActivity(newIntent);

我应该通过

    public ArrayList<VertexDisplay> vertexDisplayArrayList;
    public ArrayList<Integer> integerArrayList;

分开一个接一个?有没有办法立刻通过所有这些?

8 个答案:

答案 0 :(得分:1)

您可以尝试此解决方案。

public class FindRouteOutputForDisplay implements Serializable{
   public ArrayList<VertexDisplay> vertexDisplayArrayList;
   public ArrayList<Integer> integerArrayList;
}

Intent newIntent = new Intent(FirstActivity.this, SecondActivity.class);
FindRouteOutputForDisplay data = getMyData();
newIntent.putSerializable("data", data); 
startActivity(newIntent);

如果“putSerializable”有任何错误,那么您可以通过这种方式将对象转换为Serializable。

newIntent.putSerializable("data", (Serializable)data);

在您的活动中,只需通过此

获取您的数据
FindRouteOutputForDisplay data = getIntent().getSerializable("data");

希望它有所帮助。

答案 1 :(得分:0)

将数据保存在应用程序上下文类中。由于此类在您的应用程序实例中可用,因此您可以从所有活动中获取或设置此类中定义的变量。更多信息here

答案 2 :(得分:0)

改变这个:

startActivity(routeDetailIntent);

致:

startActivity(newIntent);

答案 3 :(得分:0)

您应该使自定义对象实现Parcelable接口:

public class MyParcelable implements Parcelable {
    private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
         = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

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

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
}

如果您需要其他解决方案,还可以查看here

答案 4 :(得分:0)

你已经错误地开始了活动。

Intent newIntent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("value", data );
newIntent.putExtras(bundle);
startActivity(newIntent );

答案 5 :(得分:0)

我有一个技巧给你。将Gson添加到您的依赖项中。

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.code.gson:gson:2.2.4'
}

将您的对象转换为Json并将其作为String传送。

String data = new Gson().toJson(getMyData())

在新活动

中将其从字符串转换回来
FindRouteOutputForDisplay data = new Gson(stringData, FindRouteOutputForDisplay.class).

答案 6 :(得分:0)

我也遇到了这个问题,所以我正在尝试以下代码:

有目的地传递对象

在开始活动中,我们可以将parcelable对象设置为intent

User user = new User("1", "u", "u", "u");

ArrayList<User> userList = new ArrayList<User>();

Sensor sensor = new Sensor("1", "s", "s", true, user, userList);

intent.putExtra("com.score.senzors.pojos.Sensor", sensor);

在目的地活动中,我们可以从意图附加(捆绑)

获取可分配对象
Bundle bundle = getIntent().getExtras();

Sensor sensor = bundle.getParcelable("com.score.senzors.pojos.Sensor")

希望它能帮助你

答案 7 :(得分:0)

您可以将该类设置为静态,并在应用中的任何位置使用它。