2011-03-30 44 views
0

我有一個包含數據列表(TextView)的活動,我需要保存此列表中已選擇的數據(onClick)能夠在另一個活動(歷史)中獲得並閱讀它保存來自活動(A)的數據並在另一活動(歷史記錄)中讀取

我知道存在「可序列化」的可能性,但我沒有成功瞭解它如何能幫助我。

如果有人能爲我澄清這個問題,我會很高興,例如?

謝謝你的幫助!

回答

0

如果你想一個String傳遞到另一個活動,你可以用putExtragetStringExtra做到這一點:

Intent intent = new Intent(this, OtherActivity.class); 
intent.putExtra("parameter", myStringParameter); 
startActivity(intent); 

然後在OtherActivityonCreate方法中讀取它:

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

這些數據將提供甚至在您的應用程序關閉後。

+0

它不是爲我好,因爲我需要保存您的使用情況最好數據即使在應用程序關閉時。 – dirko 2011-03-30 19:44:07

+0

我加了'SharedPreferences'方法,它可以讓你持久地存儲數據。 – 2011-03-30 19:49:30

0

是的,使用實現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)); 

檢索MyActivityPage在其onCreate方法:

Page p = (Page)getIntent().getExtras().getSerializable("Page"); 
Toast.makeText(this, "Name: " + p.getName() + ", Description:" + p.getDescription(), Toast.LENGTH_LONG).show(); 
0

在活動(消息傳遞)之間發送不可變狀態對象值得稱讚,恕我直言。可以說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

+0

我真的不明白你的解決方案,你可以帶一個例子 – dirko 2011-03-30 19:45:31

+0

@dirko我添加了一個鏈接到我的答案。它可能比你想要的更多:) – JAL 2011-03-30 22:04:41

0

我知道關於上面提到的方法。但僅僅爲了替代想法,既然你提到了歷史的話,那麼如何使用SQLite來達到這個目的呢? 在第一個活動中,您可以保存數據,並在第二個活動中檢索數據。

+0

嗨,你正確的解決方案,但我想知道「可序列化」。 – dirko 2011-03-30 19:42:17

0

您可以通過各種方式在您的活動之間共享數據,具體取決於您需要保存多少數據以及需要保存多長時間的數據。

  1. 意圖:有用2-3屏幕
  2. 之間數據的小位轉移時
  3. 辛格爾頓/靜態數據存儲類:有用的各種活動
  4. 之間共享大量數據時
  5. 的SQLite數據庫 :大量要共享的數據,也可用於在應用程序啓動之間保存相同數據
  6. 共享首選項:少量數據應用程序啓動。

對於使用意圖,除非該數據超過2-3活動之間共享,其中選項2將是一個更好的解決方案

相關問題