簡體   English   中英

安卓。 將此自定義對象傳遞給下一個活動?

[英]Android. Passing this custom object to next Activity?

我有這個自定義對象,我想將其傳遞給不同的 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;

一一分開? 有沒有辦法一次通過所有這些?

你可以試試這個解決方案。

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");

希望能幫助到你。

將數據保存在應用程序上下文類中。 由於此類在您的應用程序實例中可用,因此您可以從所有活動中獲取或設置此類中定義的變量。 更多信息在這里

改變這一點:

startActivity(routeDetailIntent);

到 :

startActivity(newIntent);

您應該使自定義對象實現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();
     }
}

如果您需要其他解決方案,也可以查看此處

你傳遞了錯誤的意圖來開始活動。

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

我有一個技巧給你。 將 Gson 添加到您的依賴項中。

repositories {
    mavenCentral()
}

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

將您的對象轉換為 Json 並將其作為字符串發送。

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

在新活動中將其從 String 轉換回來

FindRouteOutputForDisplay data = new Gson(stringData, FindRouteOutputForDisplay.class).

我也面臨這個問題,所以我正在嘗試下面的代碼:

有意圖地傳遞對象

在開始活動中,我們可以將 Parcelable 對象設置為意圖

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);

在目標活動中,我們可以從 Intent extras(bundle) 中獲取 Parcelable 對象

Bundle bundle = getIntent().getExtras();

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

希望對你有幫助

您可以將類設為靜態並在您的應用程序中的任何位置使用它。

暫無
暫無

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

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