我開發了一個由多個活動組成的Android應用程序,我必須在它們之間傳遞ab對象,但是我無法通過使用意圖來傳遞它,因爲對象的類沒有實現可序列化,我該怎麼做? 我不能修改我的課 謝謝:)的源代碼在活動之間傳遞對象
public class MyClass { //stuff }
//I can't modify this source code
MyClass m = new MyClass(); //object I have to pass
我開發了一個由多個活動組成的Android應用程序,我必須在它們之間傳遞ab對象,但是我無法通過使用意圖來傳遞它,因爲對象的類沒有實現可序列化,我該怎麼做? 我不能修改我的課 謝謝:)的源代碼在活動之間傳遞對象
public class MyClass { //stuff }
//I can't modify this source code
MyClass m = new MyClass(); //object I have to pass
假設有一個名爲StudentDataObject有一些數據類型的數據對象類。
StudentDataObject studentDataObject = new StudentDataObject();
Gson gson = new Gson();
String studentDataObjectAsAString = gson.toJson(studentDataObject);
現在我們使用intent將它從一個活動傳遞給另一個活動。
Intent intent = new Intent(FromActivity.this, ToActivity.class);
intent.putExtra("MyStudentObjectAsString", studentDataObjectAsAString);
startActivity(intent);
現在我們處於新的活動中,我們在這裏使用下面一行來獲取該對象。
Gson gson = new Gson();
String studentDataObjectAsAString = getIntent().getStringExtra("MyStudentObjectAsString");
StudentDataObject studentDataObject = gson.fromJson(studentDataObjectAsAString, StudentDataObject.class);
活動本身知道從哪裏我叫的,所以我們可以直接寫getIntent()方法。
在這裏我們只需要添加一個依賴GSON我們可以使用下面一行添加它的build.gradle文件。
compile 'com.google.code.gson:gson:2.6.2'
還有一件事是實現StudentDataObject爲Parcelable如果顯示錯誤,則只需按ALT + ENTER和實現方法。 嘗試一次,希望它能工作。
爲StudentDataObject樣本實施例應該是這樣的: -
public class StudentDataObject implements Parcelable {
// fields
//empty constructor
//parameterised constructor
//getters and setters
//toString method
//last implement some Parcelable methods
}
謝謝,這就是我要做的 –
@GCM歡迎,如果您對上述示例有疑問,請告訴我 –
此代碼可以幫助你:
public class EN implements Serializable {
//... you don't need implement any methods when you implements Serializable
}
FirstActivity
EN enumb = new EN();
Intent intent = new Intent(getActivity(), NewActivity.class);
intent.putExtra("en", enumb); //second param is Serializable
startActivity(intent);
SecandActivity
Bundle extras = getIntent().getExtras();
if (extras != null) {
en = (EN)getIntent().getSerializableExtra("en"); //Obtaining data
}
我的類無法實現可串行化,它是一個編譯類,我無法修改源代碼 –
在您的類中實現Serializable –
//當您實現可序列化時,您不需要實現任何方法 –
您需要實現parcelable,然後通過intent傳遞它。不要使用Serializable原因比parcelable慢。
這裏瞭解如何讓你的對象parcelable:https://developer.android.com/reference/android/os/Parcelable.html
你不來以後,通過你的對象是這樣的:
intent.putExtra("KEY", your_object);
來閱讀:
getIntent().getExtras().getParcelable("KEY");
我不能修改我的類的源代碼,所以我不能實現Parcelable –
如果你不能這樣做,那麼這是不可能的。如果你想要的話,你可以通過設置舊對象的值來創建一個新的可以對象,就像現有對象的克隆一樣,或者只傳遞重要的部分,比如id,name,description等。 –
首先創建Parcelable數據模型。
public class DataModel 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<DataModel> CREATOR
= new Parcelable.Creator<DataModel>() {
public DataModel createFromParcel(Parcel in) {
return new DataModel(in);
}
public DataModel[] newArray(int size) {
return new DataModel[size];
}
};
private DataModel(Parcel in) {
mData = in.readInt();
}
}
投放對象爲目的
intent.putExtra("KEY", object);
獲取對象從意圖
object = getIntent().getExtras().getParcelable("KEY");
DataModel是我必須通過的對象的類嗎? –
擴展類並實現在繼承的類序列化或parcelable和使用它的對象在其他的答案。
Class NewClass extends MyClass implements serializable {
//Create a constructor matching super
}
這個類,而不是我的
類的使用對象究竟是此對象嗎?它的Java類是什麼? – CommonsWare
它是一個MongoDBAndroidDriver類 –
我的猜測是它應該是一個單例,直接或通過某種包裝。所以,你沒有把它傳遞出去,但所有的東西都可以引用它。無論如何,你沒有辦法在活動之間傳遞它,所以它不是要成爲一個單身人士,就是你將不得不堅持一項活動(例如,使用多個片段)。 – CommonsWare