将UI元素值放入另一个类中

时间:2018-03-26 03:03:27

标签: android sharedpreferences android-sharedpreferences

我使用的是第三方图书馆,我推翻了其中一种方法

以下是课程

public class SmsReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //other unrelated code

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        Log.d("Device Number","Device number: " + prefs.getString("devicePhoneNumber", "DEFAULT"));
    }

}

我使用SharedPreferences来设置" devicePhoneNumber"在MainActivity类

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //other unrelated code


    Log.d("test", fromField.getText().toString());

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
    prefs.edit().putString("devicePhoneNumber", fromField.getText().toString());
    prefs.edit().commit();

    BroadcastUtils.sendExplicitBroadcast(this, new Intent(), "test action");
}

该应用程序始终打印" DEFAULT"在以下行Log.d("Device Number","Device number: " + prefs.getString("devicePhoneNumber", "DEFAULT"));

我知道如何成功地将主要布局上设置的设置传递给不同的类吗?

1 个答案:

答案 0 :(得分:0)

调用prefs.edit()会产生以下影响:

  

为这些首选项创建新编辑器,通过该首选项,您可以对首选项中的数据进行修改,并将这些更改原子地提交回SharedPreferences对象

所以在我们的代码中代替:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
prefs.edit().putString("devicePhoneNumber", fromField.getText().toString());
prefs.edit().commit();

你必须这样做:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("devicePhoneNumber",  fromField.getText().toString());
    editor.commit();

这将正确保存您的数据,因为只会使用一个编辑器实例。

如果您打算在活动之间传递数据,请考虑使用Intent.putExtra作为原始数据。您还可以考虑将Parcelable用于对象。