Java 通过SharedReference传递EditText内容

Java 通过SharedReference传递EditText内容,java,android,Java,Android,在我的应用程序中,我有两个活动,我想在SettingsActivity的EditText中键入URL地址,并在MainActivity中使用它,但我无法 这是我的设置活动: public class SettingsActivity extends Activity { Switch aSwitch; EditText editText; String URL_ENDPOINT; @Override protected void onCreate(Bundle savedInstanceS

在我的应用程序中,我有两个活动,我想在SettingsActivity的EditText中键入URL地址,并在MainActivity中使用它,但我无法

这是我的设置活动:

 public class SettingsActivity extends Activity {

Switch aSwitch;
EditText editText;
String URL_ENDPOINT;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    editText = (EditText) findViewById(R.id.etEnd);
    SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
    SharedPreferences.Editor edt = sp.edit();
    String URLValue = editText.getText().toString();
    edt.putString("URL", URLValue);
    edt.commit();
    editText.setText(sp.getString("URL" , URLValue));
}
 public class MainActivity extends Activity {


String URL_Endpoint;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_monitoring);


    //get URL for endpoint from SettingsActivity
    SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
    String URL = sp.getString("URL", "");
    URL_Endpoint = URL;
这是我的主要活动:

 public class SettingsActivity extends Activity {

Switch aSwitch;
EditText editText;
String URL_ENDPOINT;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    editText = (EditText) findViewById(R.id.etEnd);
    SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
    SharedPreferences.Editor edt = sp.edit();
    String URLValue = editText.getText().toString();
    edt.putString("URL", URLValue);
    edt.commit();
    editText.setText(sp.getString("URL" , URLValue));
}
 public class MainActivity extends Activity {


String URL_Endpoint;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_monitoring);


    //get URL for endpoint from SettingsActivity
    SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
    String URL = sp.getString("URL", "");
    URL_Endpoint = URL;

将此代码放在onPause()方法中

首先,看看Android的生命周期

现在,也就是说,
onCreate
方法在创建活动时只调用一次,如图所示

因此,在
onCreate
方法中获取
editText
的文本将导致空文本(如果未预填充)

由于我认为您希望创建一个设置活动,为
main活动设置一些内容,因此有两种方法可以实现您的目标:

  • 您可以添加“保存”
    按钮
    。由于用户可能会输入一些内容并改变主意,因此我将重新发送此消息,这样单击“返回”将取消操作
  • 您可以将
    editText
    值保存在
    SettingsActivity
    onPause
    。无论发生什么情况,每次用户退出活动时,此方法都将覆盖该值
  • 注意:请记住在
    onCreate/onResume
    中弹出
    settingsActivity
    的文本,否则它将始终为空

    另外一点是,正如您在图中所看到的,一旦您从设置返回,将不会再次调用“活动”
    onCreate
    。因此,在
    onResume
    方法中,您可以从
    SharedReference
    中获取值,并将其放入
    MainActivity的
    textview中


    首先,我建议您研究一下
    生命周期
    ,因为它确实是Android编程的核心信息。

    当设置活动被创建时,您的EditText是空的,对吗?
    onCreate()中的
    EditText.getText().toString()
    将始终返回空字符串。您是否已通过打印该URL字符串的登录MainActivity进行检查?非常感谢,它起到了作用,但我还有一个问题:当我在EditText中键入URL并按“上一步”时,EditText将变为空,我该怎么做才能使我的URL即使在我按Back键时仍保留在TextView中?@Amiroff抱歉,但我不明白。。你指的是哪个edittext/textview?对不起,我错了,我在上一条评论中写的是textview而不是edittext。。。我想保留编辑文本的内容,即使我按下Back@amirofff阅读我的答案,如果您在onCreate中启用该值,则每次进入设置活动时,该值都将初始化。使用与为MainActivity检索内容相同的方法执行此操作否,在我的设置Activity中,我将SharedPref放在onPause()方法中,但当我按Back键时,我的EditText将更改为空,即使返回MainActivity,我也希望将内容保存在EditText中