react-native:以编程方式从App内部清除缓存(例如,通过按钮单击)

时间:2017-01-12 13:34:49

标签: react-native

是否可以在React-Native中实现某种“清除缓存”功能,以便用户可以单击一个按钮并清除应用程序缓存?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您想要清理哪种缓存? 一些应用程序级缓存? 如果是这样 - 创建react-native本机模块并实现您需要的功能。

或者你想要做同样的事情: npm start - --reset-cache? 开箱即用是不可能的。 但是您可以扩展react-native packager并添加开发人员菜单选项。

答案 1 :(得分:0)

您可以使用此模块https://github.com/midas-gufei/react-native-clear-app-cache

或根据项目的要求在本机中单独实现缓存删除(就像我的项目只需要摆脱mp4s和pdf) 缓存资源可在以下位置找到: ios:NSTemporaryDirectory()

  NSError *error;

  NSArray *directoryItems1 = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:&error];
  NSLog(@"%@, %@", directoryItems1, [directoryItems1 objectAtIndex:0]);


  if ([[NSFileManager defaultManager] fileExistsAtPath:[directoryItems1 objectAtIndex:0]])  //Does directory exist?
  {
    if (![[NSFileManager defaultManager] removeItemAtPath:[directoryItems1 objectAtIndex:0] error:&error])  //Delete it
    {
      NSLog(@"Delete directory error: %@", error);
    }
  }

机器人: `

public void clearApplicationData()
    {
        File cache = getCacheDir();
        File appDir = new File(cache.getParent());
        if (appDir.exists()) {
            String[] test =  cache.list();
            Log.d("before", Arrays.toString(test));
            for (String s : test) {
                if (s.contains(".pdf") || s.contains(".mp4")) {
                    deleteDir(new File(cache, s));
                    Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
                }
            }
            Log.d("After delete", Arrays.toString(cache.list()));
        }
    }

public static boolean deleteDir(File dir)
{
    if (dir != null && dir.isDirectory()) {
    String[] children = dir.list();
    for (int i = 0; i < children.length; i++) {
        boolean success = deleteDir(new File(dir, children[i]));
        if (!success) {
            return false;
        }
    }
}
    return dir.delete();
}`