簡體   English   中英

在活動中保存數據

[英]Save data in an activity

我有2個活動,第一個是從用戶那里獲取圖像。 第二個活動從谷歌地圖獲取數據。 但是,如果我使用意圖從第一個活動調用第二個活動,而又使用另一個意圖返回第一個活動,則數據消失了。 有什么方法可以保存圖像和第二個活動返回的數據?

有幾個選項。 您現在可能最容易訪問的是使用共享首選項:

SharedPreferences prefs = this.getSharedPreferences("com.your.app", Context.MODE_PRIVATE);
byte[] image;  // populate this byte array with your image
String key = "myimagekey";
String imgString = new String(image, "UTF-8");
prefs.edit().putString(key, imgString).apply();

這將包含圖像的字節數組存儲為字符串。 然后,在下一個活動中,您可以通過以下方式檢索它:

String img = prefs.getString(key, null);

另一個選擇,也許是更多的工作,將是配置您的應用程序可以使用的SQLite數據庫。 然后,您可以簡單地將圖像作為BLOB插入到某個表中,然后在下一個活動中從同一表中讀取。

您可以將圖像或大數據保存到內部存儲(android doc)中,也可以將其他較小的數據(例如,數組列表,對象保存到與gson共享的首選項中(有關此信息 ,請參閱本教程 )。

希望這可以幫助!

有兩種方法可以實現所需的效果,具體取決於環境。

最常見的情況(這聽起來像您的情況)是使用子Activity來獲取用戶輸入時-例如從列表中選擇聯系人或在對話框中輸入數據。 在這種情況下,您應該使用startActivityForResult啟動子Activity。

這提供了使用setResult將數據發送回主Activity的管道。 setResult方法采用int結果值和Intent,該Intent傳遞回調用方Activity。

Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data"); 
setResult(Activity.RESULT_OK, resultIntent);
finish();

要在調用的Activity中訪問返回的數據,請重寫onActivityResult requestCode對應於在startActivityForResult調用中傳入的整數,而resultCode和數據Intent是從子Activity返回的。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
    case (MY_CHILD_ACTIVITY) : {
      if (resultCode == Activity.RESULT_OK) {
        // TODO Extract the data returned from the child Activity.
        String returnValue = data.getStringExtra("some_key");
      }
      break;
    } 
  }
}

暫無
暫無

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

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