我有一個包含數據列表(TextView)的活動,我需要保存此列表中已選擇的數據(onClick)能夠在另一個活動(歷史)中獲得並閱讀它保存來自活動(A)的數據並在另一活動(歷史記錄)中讀取
我知道存在「可序列化」的可能性,但我沒有成功瞭解它如何能幫助我。
如果有人能爲我澄清這個問題,我會很高興,例如?
謝謝你的幫助!
我有一個包含數據列表(TextView)的活動,我需要保存此列表中已選擇的數據(onClick)能夠在另一個活動(歷史)中獲得並閱讀它保存來自活動(A)的數據並在另一活動(歷史記錄)中讀取
我知道存在「可序列化」的可能性,但我沒有成功瞭解它如何能幫助我。
如果有人能爲我澄清這個問題,我會很高興,例如?
謝謝你的幫助!
如果你想一個String
傳遞到另一個活動,你可以用putExtra
和getStringExtra
做到這一點:
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("parameter", myStringParameter);
startActivity(intent);
然後在OtherActivity
的onCreate
方法中讀取它:
String parameter = getIntent().getStringExtra("parameter");
Serializable
接口對編組更復雜的對象很有用;如果你只是處理String
,你不需要這個。
編輯 - 如果你需要存儲少量數據的持續,您可以使用SharedPreferences:
final String TAG = "MyApplication";
SharedPreferences prefs = getSharedPreferences(TAG, MODE_PRIVATE);
prefs.edit().putString("parameter", myStringParameter).commit();
,然後閱讀喜好:
final String TAG = "MyApplication";
SharedPreferences prefs = getSharedPreferences(TAG, MODE_PRIVATE);
String parameter = prefs.getString("parameter", null);
這些數據將提供甚至在您的應用程序關閉後。
是的,使用實現Serializable
的類。見我的回答這個問題:How to pass several variables of different types from one function to another on android?
創建一個將容納一些數據模型類:
public class Page implements Serializable {
private String name;
private String description;
//and so on...
public Page(String name, String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
現在你可以創建一個Page
對象,並通過構造數據(名稱,描述)填充它。可以選擇製作一些製作者。
Page p = new Page("James", "Hello World");
startActivity(new Intent(context, MyActivity.class).putExtra("Page", p));
檢索MyActivity
你Page
在其onCreate
方法:
Page p = (Page)getIntent().getExtras().getSerializable("Page");
Toast.makeText(this, "Name: " + p.getName() + ", Description:" + p.getDescription(), Toast.LENGTH_LONG).show();
在活動(消息傳遞)之間發送不可變狀態對象值得稱讚,恕我直言。可以說OOP是關於消息傳遞的,而不是對象。兩點建議。 1)使用完全限定名稱名稱:值對這樣做的:
private void launchManagePassword() {
Intent i= new Intent(this, ManagePassword.class); // no param constructor
PasswordState outState= new PasswordState(lengthKey,timeExpire,isValidKey,timeoutType,"",model.getIsHashPassword());
Bundle b= new Bundle();
b.putSerializable("jalcomputing.confusetext.PasswordState", outState);
i.putExtras(b);
startActivityForResult(i,REQUEST_MANAGE_PASSWORD); // used for callback
}
這將最大限度地減少運行時轉換錯誤。
2)如果您的應用程序運行良好且對象接口爲已穩定請考慮將代碼重構爲parcel以提高速度。
JAL
編輯:根據要求Code
我知道關於上面提到的方法。但僅僅爲了替代想法,既然你提到了歷史的話,那麼如何使用SQLite來達到這個目的呢? 在第一個活動中,您可以保存數據,並在第二個活動中檢索數據。
嗨,你正確的解決方案,但我想知道「可序列化」。 – dirko 2011-03-30 19:42:17
您可以通過各種方式在您的活動之間共享數據,具體取決於您需要保存多少數據以及需要保存多長時間的數據。
對於使用意圖,除非該數據超過2-3活動之間共享,其中選項2將是一個更好的解決方案
它不是爲我好,因爲我需要保存您的使用情況最好數據即使在應用程序關閉時。 – dirko 2011-03-30 19:44:07
我加了'SharedPreferences'方法,它可以讓你持久地存儲數據。 – 2011-03-30 19:49:30