从另一个活动中保存字符串的最佳方法

时间:2014-02-13 19:13:21

标签: android android-intent android-activity sharedpreferences

在活动A中获取字符串值并将其保存为活动B的最佳方法是什么? 我认为Intents和SharedPreferences之间可能存在关系!

有人?

6 个答案:

答案 0 :(得分:1)

  

在活动A中获取字符串值并将其保存为活动B的最佳方法是什么?

这取决于“保存活动B”的含义

如果您只想将其“传递”到B并在那里使用,那么只需发送Intent

Intent i = new Intent(..., ...);
i.putExtra("someKey", someString);
startActivity(i);

并使用

之类的内容在B(而不是onCreate()之前)获取它
Intent intent = getIntent();
String foo = intent.getStringExtra("someKey");

如果你想让它真正坚持下去,那么SharedPreferences会很好。文档中有一个很好的例子。

Intent Docs

SharePreferences

答案 1 :(得分:1)

有不同的方法来解决这个问题,但你选择的那个实际上取决于你的需求,这篇文章解释了你可以采取的不同方法。

http://www.doepiccoding.com/blog/?p=153

基本上,有:

-Shared Preferences

-Intent Extras

-Application Subclass

-SQLite数据库

所有这些都被详细解释......

问候!

答案 2 :(得分:1)

您可以在意图中存储不同的值。这是官方的Google示例: Google

<强>意图

在活动A:

public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";    

Intent intent = new Intent(this, ActivityB.class);
String message = "Your String";
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);

在活动B中:

Intent intent = getIntent();
String message = intent.getStringExtra(ActivityA.EXTRA_MESSAGE);

Shared Preferences

在活动A:

private static final String PREV_STRING_VALUE = "prevStringValue";

String value = "yourString";
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.edit().putString(PREV_STRING_VALUE, value).apply();

在活动B中:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String value = sp.getString(ActivityA.PREV_STRING_VALUE, "DefaultValue");

或其他一些方法:

  • SQLite Databases
  • 一个Singleton类(但如果需要持久性数据,并不总是建议)

传递数据的方法有很多种。但是,您需要哪种类型的实施始终取决于具体情况。如果您希望您的数据仅传递给下一个活动/片段并且它是临时数据,那么只需使用意图。

如果您在应用程序的进一步过程中需要数据,则使用SQLite数据库或SharedPreferences(如果它不是复杂的数据)。保存您的价值,您可以随时随地访问它。

答案 3 :(得分:0)

你可以通过很多方式做到这一点。

一个人正在使用偏好

所以例如

int myVal = 16;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putInt("MY_KEY",myVal).commit();

然后,在您的下一个活动中

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.getInt("MY_KEY", 0); //Where 0 is the default value

您也可以使用意图,如您所说

int myVal = 16
Intent intent = new Intent(); //Make your intent as you normally would
intent.putExtra("MY_KEY", myVal);

在下一个活动的onCreate()中:

int myVal = getIntent().getExtras().getInt("MY_VALUE");

然而,这些是基本实现。正如Artoo Detoo所说,有很多不同的方法可以做到这一点。您可以使用片段,静态类,其他包等来完成此操作。这取决于具体情况 - 最好使用intent方式,这样您就不会无缘无故地将值存储在首选项中。如果您只需要它从活动A转到活动B,只需使用intent方法。如果你需要在很多不同的地方,但不想跟踪它?使用prefs。

答案 4 :(得分:0)

非常感谢所有帮助过我的人,我很高兴看到有重要的人仍然关心我们。简单的解决方案是保存按钮的ID之间的冲突,因为在所有活动中都拥有相同的ID。这就是这个! 谢谢大家!

答案 5 :(得分:0)

存储字符串值并在另一个活动中恢复的简单方法是: 1)在第一个活动开始活动中,大多数返回结果为字符串(在创建最终的int变量之前,如RETURN_DATA_AS_STRING)

Intent intent = new Intent(getApplicationContext(), ReturningResultActivity.class);
startActivityintent(intent,RETURN_DATA_AS_STRING);

2)在商店数据的下一个活动中进行下一步:

Intent intent = new Intent();
intent.putExtra("SomeStringIdentifier", "this is resulting string");
setResult(RESULT_OK,intent);

3)在第一个活动覆盖onActivityResult():

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case RETURN_DATA_AS_STRING: {
                    String thisIsResultStringFromAnotherActivity = data.getStringExtra("SomeStringIdentifier");
                }
            }
        }
    }