2011-11-03 88 views
1

我一直在寻找在过去一天半的几个网站关于如何存储字符串/字符串数组/ /等。我似乎无法弄清楚。我不确定我是否不完全理解如何实现数据存储..或者什么。但这是我的问题,简单地说,我有两个活动页面(我们分别命名为'A,B')。我想要做的就是从Activity B的文本视图中获取一个字符串,将其存储在一个数组中,然后通过单击Activity A中的按钮来访问它。Android存储字符串数组

我知道这很简单,但是我碰到了因为某种原因阻塞...我试图使用SharedPreferences,但是我如何从Activity B获取字符串,将其存储在全局数组中,并让它由不同的活动(Activity A)访问?

+0

谢谢大家的帮助 – Derek

回答

3

只要将它保存到共享偏好(通常的onPause()):

在一个又一个的活动和负载
  SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
      editor.putString(GAME_STATE, writer.toString()); 
      editor.commit(); 

(通常的onResume()):

 SharedPreferences preferences = getPreferences(MODE_PRIVATE); 


    String jsonState = preferences.getString(GAME_STATE, null); 

而且没有什么能阻止你从使用公共静态变量

+0

好吧,这是我所看到的,但对我来说这个问题发生在这里。该程序非常简单,我没有使用任何线程,只是意图。它看起来效率很低,但它是一个非常小的程序。调用时,编辑器的putString是如何存储的?编辑器是否像堆栈一样工作,能够采用多个字符串?或者它一次只能存储一个字符串? – Derek

+0

首选项编辑器是地图。只是怕它javadocs。它可以将字符串和原语存储在不同的键下。虽然这可能看起来没有效果,但这是在任何时候您的活动可以停止并被杀死的环境中的正确方法(例如来电) –

+0

如果我想存储一个字符串,现在很容易,但是您将如何存储多个字符串?如果用户按下“保存文本”按钮,那么该代码将被调用,但它不会在编辑器中使用相同的密钥创建一个字符串?有没有办法解决这个问题? – Derek

0

是的,你可以获取和存储全局数组的值,但是一旦你关闭了应用程序,你将会失去所有的东西。因此,您最好创建一个表格,并根据需要存储/获取表格中的值。

以下是创建SQLite example的示例。

+0

好吧,您认为我需要SQLite吗?我只想要存储二十根琴弦。 – Derek

+0

@Derek但是,如果您存储并关闭应用程序,您将再次重新打开应用程序时会丢失所有内容。 –

+0

SQLite对此将会矫枉过正。 –

1

您不能直接在共享首选项中存储数组,但可以存储一组数据。

参见putStringSetgetStringSet。如果您希望将它们存储在SharedPreferences中,您可以将阵列中的所有项目添加到LinkedHashSet(只要它们是唯一的)。有关如何使用SharedPreferences的一般想法,请参阅Konstantin的答案。