Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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 当用户关闭应用程序时删除值_Android_Android Preferences - Fatal编程技术网

Android 当用户关闭应用程序时删除值

Android 当用户关闭应用程序时删除值,android,android-preferences,Android,Android Preferences,因此,在我的应用程序中,我使用SharedReferences保存片段状态。但是一旦用户走出应用程序,我想删除SharedReferences中的那些条目。我尝试了以下方法: public void removePreferences(){ editor.clear(); editor.commit(); } 在我的主课上: @Override protected void onPause() { // TODO Auto-generated method stub

因此,在我的应用程序中,我使用
SharedReferences
保存片段状态。但是一旦用户走出应用程序,我想删除
SharedReferences
中的那些条目。我尝试了以下方法:

public void removePreferences(){
    editor.clear();
    editor.commit();
}
在我的主课上:

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}
其中SM是我创建的助手类的实例。“首选项”执行以下操作:

public void removePreferences(){
    editor.clear();
    editor.commit();
}
但我注意到这件事从未执行过。通过日志,我确实看到应用程序进入了isFinishing()if语句中,但该方法从未执行过。我也尝试了
onDestroy()
,但该方法从未被调用


有人能帮我吗?

使用顶部覆盖来完成此操作

像这样:

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((savedInstanceState != null) {
        // get your values, for example:
        mID = savedInstanceState.getInt("ID");
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // put your values, for example:
    outState.putInt("ID", mID);
}

使用顶部覆盖来完成此操作

像这样:

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((savedInstanceState != null) {
        // get your values, for example:
        mID = savedInstanceState.getInt("ID");
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // put your values, for example:
    outState.putInt("ID", mID);
}

我认为可以使用
onSaveInstanceState
机制来实现您想要的

尽管如此,我还是会尝试回答您的特定问题,同时假设说“该方法从未实现”,您的意思是if语句值始终为false,并且您的方法不会被调用

isFinishing()
仅当您在
活动
上调用
finish()
或其他人请求完成时,才会返回
true
。 如果您只需单击home按钮,就会得到
isFinishing()
=
false
,因此不会调用您的方法。因此,请确保您实际完成了
活动
,而不仅仅是暂停它


无论如何,找出问题所在的最佳方法是使用调试器。

我认为您要查找的内容可以使用
onSaveInstanceState
机制实现

尽管如此,我还是会尝试回答您的特定问题,同时假设说“该方法从未实现”,您的意思是if语句值始终为false,并且您的方法不会被调用

isFinishing()
仅当您在
活动
上调用
finish()
或其他人请求完成时,才会返回
true
。 如果您只需单击home按钮,就会得到
isFinishing()
=
false
,因此不会调用您的方法。因此,请确保您实际完成了
活动
,而不仅仅是暂停它


无论如何,找出问题所在的最佳方法是使用调试器。

不要将片段的实例状态保存在
SharedReferences
中,而是保存在要执行此操作的捆绑包中。您可以这样访问它:

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((savedInstanceState != null) {
        // get your values, for example:
        mID = savedInstanceState.getInt("ID");
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // put your values, for example:
    outState.putInt("ID", mID);
}
这样你就不必自己管理价值观了

如果有自定义对象,可以使其实现


与此相反,
SharedReferences
用于保存即使在应用程序关闭后仍应保留的值,即:首选项。

不要将片段的实例状态保存在
SharedReferences
中,而是保存在用于保存的捆绑包中。您可以这样访问它:

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((savedInstanceState != null) {
        // get your values, for example:
        mID = savedInstanceState.getInt("ID");
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // put your values, for example:
    outState.putInt("ID", mID);
}
这样你就不必自己管理价值观了

如果有自定义对象,可以使其实现


相比之下,
SharedReferences
用于保存即使在应用程序关闭后仍应保留的值,即:首选项。

更好的方法是在onDestroy()中不使用if语句。
但是,您可以从Android文档中阅读关于onDestroy()的内容:

在某些情况下,系统会简单地终止活动的宿主进程,而不在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程结束后仍保留的操作


因此,在我看来,如果您不希望数据在活动结束后保留,那么应该使用类来保存它。

更好的方法是在onDestroy()中不使用if语句。
但是,您可以从Android文档中阅读关于onDestroy()的内容:

在某些情况下,系统会简单地终止活动的宿主进程,而不在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程结束后仍保留的操作


因此,在我看来,如果您不希望数据在活动结束后保留,您应该使用类来保存它。

应用程序在isFinishing()if语句中,但该方法从未实现过。如果代码进入
If
块,则必须执行该方法。你凭什么说不是?顺便说一句,logcat不是解决此类问题的好方法。相反,您应该使用调试器。这就是它的目的。此外,共享首选项并不是存储应用程序退出时将删除的状态的好方法。您建议我如何执行保存状态的操作。。。因为这是我最后的办法@Simon“你建议我怎么做拯救各州的事情”——因为不清楚“各州”是什么或者你为什么要“拯救”它们,这是不可能回答的。但是,我同意Simon的观点:不要将不希望包含在文件中的内容放在文件中。
应用程序在isFinishing()if语句中,但该方法从未实现过
。如果代码进入
If
块,则必须执行该方法。你凭什么说不是?顺便说一句,logcat不是解决此类问题的好方法。相反,您应该使用调试器。这就是它的目的。此外,共享首选项并不是存储应用程序退出时将删除的状态的好方法。您建议我如何执行保存状态的操作。。。因为这是我最后的办法@Simon“你建议我怎么做拯救各州的事情”——因为不清楚“各州”是什么或者你为什么要“拯救”它们,这是不可能回答的。然而,我同意西蒙的观点:不要把东西放在