Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 保存Edittext中的最新文本,并在onDestroy后还原_Android_Android Edittext_State - Fatal编程技术网

Android 保存Edittext中的最新文本,并在onDestroy后还原

Android 保存Edittext中的最新文本,并在onDestroy后还原,android,android-edittext,state,Android,Android Edittext,State,对于我的quote creator应用程序,如果用户在应用程序中写入了文本,并且意外地关闭了应用程序并再次启动,则所有文本都将消失。当然,我想防止这种情况发生,我尝试了一种常见的解决方案,但没有成功: 这就是我到目前为止所做的。我删除了不相关的代码 public static EditText mEditText; private String savedText; private static final String SAVED_TEXT_KEY = ""; @Override publi

对于我的quote creator应用程序,如果用户在应用程序中写入了文本,并且意外地关闭了应用程序并再次启动,则所有文本都将消失。当然,我想防止这种情况发生,我尝试了一种常见的解决方案,但没有成功:

这就是我到目前为止所做的。我删除了不相关的代码

public static EditText mEditText;
private String savedText;
private static final String SAVED_TEXT_KEY = "";

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
    savedText = SAVED_TEXT_KEY;

}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mEditText.setText(SAVED_TEXT_KEY);
    String myString = savedInstanceState.getString(SAVED_TEXT_KEY);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mEditText = (EditText) findViewById(R.id.edittext);
    mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
    savedText = mEditText.getText().toString();
    mEditText.setText(SAVED_TEXT_KEY);



    if(savedInstanceState !=null){

        savedText = savedInstanceState.getString(SAVED_TEXT_KEY);

    }
}

如果我没有错,那么您就不会再次在textview上设置文本

@Override
public void onSaveInstanceState(Bundle outState) {
  outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
  super.onSaveInstanceState(outState);
}

public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  mEditText = (EditText) findViewById(R.id.edittext);
  mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));
  if (savedInstanceState != null) {
    mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
  }
}

这应该可以解决问题。

首先,您应该为保存的\u key\u文本提供正确的键,而不是空字符串

private static final String SAVED_TEXT_KEY = "some_key";
然后,您应该将onCreate更新为:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mEditText = (EditText) findViewById(R.id.edittext);
    mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));

    if(savedInstanceState !=null){
        mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
    }
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
public void onSaveInstanceState(Bundle outState) {
    outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
    super.onSaveInstanceState(outState);
}
将您的onRestoreInstanceState设置为:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mEditText = (EditText) findViewById(R.id.edittext);
    mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));

    if(savedInstanceState !=null){
        mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
    }
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
public void onSaveInstanceState(Bundle outState) {
    outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
    super.onSaveInstanceState(outState);
}
最后,您的onSaveInstanceState将:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mEditText = (EditText) findViewById(R.id.edittext);
    mEditText.setTypeface(Style.getTypeface(this, Style.SERIF));

    if(savedInstanceState !=null){
        mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
    }
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mEditText.setText(savedInstanceState.getString(SAVED_TEXT_KEY));
}
public void onSaveInstanceState(Bundle outState) {
    outState.putString(SAVED_TEXT_KEY, mEditText.getText().toString());
    super.onSaveInstanceState(outState);
}
试试这个:

通过覆盖以下内容保存您的状态:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(KEY, mEditText.getText().toString());
}
并恢复它:

public void onCreate(Bundle savedInstanceState) {
    if(savedInstanceState != null)
    {
        mEditText.setText(savedInstanceState.getString(KEY));
    }
}
使用IcePick库:


@状态字符串用户名;//这将自动保存和恢复

似乎我对此问题的处理方法错误。按照建议,我使用SharedReferences保存当前文本

   public static final String LAST_TEXT = "";

    final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    mEditText.setText(pref.getString(LAST_TEXT, ""));
    mEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {

            pref.edit().putString(LAST_TEXT, s.toString()).commit();


        }
    });

你试过在
onPause()
/
onDestroy()
onResume()
中这样做吗?@Jiyeh是的,我试过将Edittext中的当前文本保存在变量savedText in onDestroy和onPause中,但我写了一些东西并关闭应用程序时,文本未保存。我已找到解决方案并回答了我提出的问题,但当我编写内容并关闭应用程序时,文本未保存。当然,关闭应用程序会导致应用程序丢失其数据。尝试将数据保存在SharedReferences中并从首选项还原。好的。所以这些解决方案的人发布了她的帖子,在应用程序关闭后没有保存任何内容吗?正确。它仅在应用程序暂停或发生方向更改时保存和恢复。我的解决方案也只适用于这些情况。尝试将其保存在首选项中。谢谢提示。我使用了SharedReferences,它起作用了!我会发布答案,现在我是由其他人提出的,但它并没有说“关闭”是指杀死应用程序吗?你可能想考虑将数据存储在SharedPref DB代码>毁灭()/<代码>中,并恢复它<代码> OnCeCuto()。我按照其他人的建议做了这个,但没有work@Muddz您应该将数据存储在SharedPref中,然后为像我这样的复制粘贴者恢复数据,使
LAST_TEXT=“”使您的密钥
“”
。因此,如果您有多个EditText,您应该这样设置键:
LAST\u TEXT\u KEY1=“mEditText1”;LAST_TEXT_KEY2=“mEditText2”