如何以编程方式重置android app中的所有数据?

时间:2014-02-03 12:46:32

标签: android sharedpreferences

我想在“设置”中创建重置按钮。当我按下此按钮时,必须删除所有数据和共享首选项,就像我在Clear data选项中按Manage applications一样。

有没有办法做到这一点?

public class Settings extends MainActivity {

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

 public static void delete(File file, boolean deleteDir) 
 {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    delete(f, true);
                }
            }
            if (deleteDir) {
                file.delete();
            }
        } else {
            file.delete();
        }
  }

 public static void clearData(Context context) 
 {
        File files = context.getDir("tmp", Context.MODE_PRIVATE);
        delete(files.getParentFile(), false);
 }

public void OnClickReset(View v)
{
    clearData(this);
}       

}

1 个答案:

答案 0 :(得分:2)

我不确定,但我认为您可以使用方法Context.getFilesDir()。它返回File对象,该对象引用内部应用程序目录。

之后,您可以访问父目录并删除其中的所有内容。

<强>编辑:

嗯,这段代码有效:

档案 AppUtils.java

import android.content.Context;
import java.io.File;

public class AppUtils {    
    public static void delete(File file, boolean deleteDir) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    delete(f, true);
                }
            }

            if (deleteDir) {
                file.delete();
            }
        } else {
            file.delete();
        }
    }

    public static void clearData(Context context) {
        File files = context.getDir("tmp", Context.MODE_PRIVATE);
        delete(files.getParentFile(), false);
    }
}

但我使用方法getDir()代替getFilesDir(),因为第二个可能会返回null

注意:如果您已打开SharedPreferences.Editor,则不会将其删除!此外,打开的数据库或任何打开的文件描述符可能会导致同样的问题。