我想在“设置”中创建重置按钮。当我按下此按钮时,必须删除所有数据和共享首选项,就像我在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);
}
}
答案 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
,则不会将其删除!此外,打开的数据库或任何打开的文件描述符可能会导致同样的问题。