我们可以使用SharedPreference将数据从一个Activity共享或传输到另一个Activity吗?

时间:2017-07-12 11:45:33

标签: java android android-activity sharedpreferences

我必须将保存文件路径从一个活动转移到另一个活动,但是当显示数据时它显示为空值。

以下是在SharedPreference中存储数据的代码: -

    SharedPreferences pref= getApplicationContext().getSharedPreferences("Recorder",0);
    SharedPreferences.Editor editor = pref.edit();
    editor.putString("file_name",DateFormat.format("yyyy-MM-dd_kk-mm-ss", new Date().getTime())+".mp4");
    editor.putString("file_path",Environment.getExternalStorageDirectory()+"/"+DateFormat.format("yyyy-MM-dd_kk-mm-ss", new Date().getTime())+".mp4");

从sharedPreference中检索数据: -

 file_name = (TextView) findViewById(R.id.file_name);
    file_path = (TextView) findViewById(R.id.file_path);
    pref = getApplicationContext().getSharedPreferences("Recorder",0);
    editor = pref.edit();
    String fileName = pref.getString("file_name",null);
    String filePath = pref.getString("file_path",null);

    if(fileName != null){
            file_name.setText(fileName);
    }else{
        file_name.append("");
    }

    if (filePath != null){
        file_path.setText(filePath);
    }else{
        file_path.append("");
    }

7 个答案:

答案 0 :(得分:2)

您必须通过

应用编辑器

editor.commit():

editor.apply();

答案 1 :(得分:1)

缺少

editor.apply()。你没有提交保存。

答案 2 :(得分:1)

为什么需要超载系统?你有一个在活动之间传递数据的机制,只需在intent中发送文件的路径。

在ActivityA中:

Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putExtra("filePath", "...");
startActivity(intent);

在ActivityB中:

String filePath = getIntent().getExtras().getString("filePath");

答案 3 :(得分:0)

是的,您可以使用SharedPreference 存储信息。

要将数据从一个活动传递到另一个活动,最好使用意图。

    Intent intent = new Intent(CurrentActivity.this, AnotherActivity.class);
    intent.putExtra("file_name","name");
    intent.putExtra("file_path","path");
    startActivity(intent)

在另一个活动中,

String fileName = getIntent().getStringExtra("file_name");
String filePath = getIntent().getStringExtra("file_path");

答案 4 :(得分:0)

如果您使用SharedPreffernces只是为了在活动之间共享数据,那就太过分了。

如果应用重启后数据应该可用,那么您的解决方案就是好的。但是如果你只在运行时需要它,最好使用其他答案中提到的Intent。

就个人而言,我更愿意将其存储在一些静态变量中。

答案 5 :(得分:0)

editor.commit()丢失了。 更好的方法是使用可以在intent中设置的bundle,并使用此intent启动另一个活动,然后从intent的bundle中获取值。

答案 6 :(得分:0)

是的,您可以使用SharedPrefernces。尝试以下代码

     public static final String MYPREFERNCES_Example = "mysharedpref";
     SharedPreferences.Editor editor ;
     SharedPreferences sp;

    sp = getSharedPreferences(MYPREFERNCES_Example Context.MODE_PRIVATE);
    editor=sp.edit();

    Intent i_login = new Intent(LoginActivity.this, HomeActivity.class);
    editor.putString("yourownkey1", yourvalue);
    editor.putString("yourownkey2", yourvalue);
    editor.putString("yourownkey3", yourvalue);
    startActivity(intent)

并在下一个活动中

sp = getSharedPreferences(MYPREFERNCES_Example, 0);   
editor = sp.edit();  
String fn = sp.getString("yourownkey1", "");
String ln = sp.getString("yourownkey2", "");
String fbemail = sp.getString("yourownkey3", "");