【问题标题】:App not working on AVD, only actual devices应用程序无法在 AVD 上运行,只能在实际设备上运行
【发布时间】:2013-08-18 09:42:27
【问题描述】:

我正在尝试测试我的应用程序,但没有使用任何模拟器。我尝试了一些不同的 AVD 和 BlueStacks。由于他们挂载虚拟 SDCard 的方式,我的应用程序没有按预期找到缓存目录。但是,当我在两部不同的 Android 手机上运行相同的应用程序时,它似乎可以正常工作。面对这个问题,我认为必须有更好的方法来引用我正在寻找的文件夹。

我在我的 onCreate 中使用它:

    // Check if application exists
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).packageName.equals("com.someapphere")) {
            v.setText("Application Found");
            break;
        } else {
            v.setText("Application Not Found");
        }
    }

    if (v.getText() == "Application Found") {
        // Check for Cache Usage
        final File dataStore = Environment.getExternalStorageDirectory();
        try {
            File tCache = new File(dataStore.getAbsolutePath()
                 + "/Android/data/com.someapphere/cache");
            long tCacheSize = folderSize(tCache);

            if (tCacheSize == 0) {
                 v2.setText(" Nothing to do");
            } else {
              // Start Async task - delete files
              ...
            }
        } catch(Exception e) {
              v2.setText(" Cache not found");
        }
    }

我去掉了我在这里做的其他一些不相关的东西,但其余的应该会复制这个问题。如果还不是很明显,我对编程还是很陌生。

【问题讨论】:

    标签: android android-external-storage


    【解决方案1】:

    无法将文本与“==”进行比较。

    你应该这样尝试:

    v.getText().toString().equalsIgnoreCase("Application Found");
    

    它在模拟器中不起作用可能是因为您在模拟器中没有 SD 卡支持。

    在 Eclipse 中进入菜单 Window – Android SDK and Avg Manager 选择虚拟设备 选择需要安装 SD 卡的 AVD 名称 点击编辑按钮 在打开的对话框中转到 SD 卡 – 大小:并写入 500 按下按钮编辑 AVD 运行 AVD 模拟器

    希望对你有帮助!!

    【讨论】:

    • 感谢您提供有关文本比较的提示。但是,我所有的 AVD 配置都已经分配了 SD 空间。我还没有尝试过的一件事是在 AVD 中安装文件管理器并验证结构确实是 /Android/data/com.app/cache。接下来我会这样做。
    • 更改文本部分后出现 lint 错误。它是说“CharSequence 类型的方法 equalsIgnoreCase(String) 未定义。”
    • getText() 返回 charSequence。所以我们需要把它转换成字符串,就像编辑过的代码一样。
    • 我刚把astro文件管理器推到AVD里面,文件夹肯定不见了。但在这样做时,我看到 /Android/data/ 部分至少是正确的。需要追查为什么我要清除的应用程序还没有在那里放置任何缓存。我想我真正的问题是,/Android/data/ 在所有 Android 设备上都一样吗?
    • 如果您在外部存储中创建了文件夹,那么您可以根据您的代码获取它。所以你需要检查你是否在外部存储中创建文件夹??
    【解决方案2】:

    一个可能的错误:

    v.getText() == "Application Found" // try .equals instead
    

    【讨论】:

      【解决方案3】:

      尝试替换此代码:

      File tCache = new File(dataStore.getAbsolutePath() + "/Android/data/com.someapphere/cache");
      

      使用此代码:

      File cache_Folder = new File(dataStore + "/Android/data/com.someapphere/cache");
      if (!cache_Folder.exists())
          cache_Folder.mkdirs();
      
      File tCache = new File(dataStore + "/Android/data/com.someapphere/cache");
      

      【讨论】:

      • 由于我的应用程序的整个想法是删除缓存,如果目录不存在,我想不出任何理由要创建该目录。剩下的一个区别是 getAbsolutePath... 在我现有的结构中,这不是必需的吗?
      • 那你需要使用这个:File cacheDir = new File(context.getCacheDir());
      • 如果我弄错了,请纠正我,但getCacheDir不是只适用于我自己的应用程序吗?相反,它不会对针对单独的 3rd 方应用程序的缓存目录产生影响吗?
      • getCacheDir 获取您自己的应用缓存目录,该目录位于手机内存中,例如:data/data/com.someapphere/cache。
      • 我只对 sdcard 上的文件感兴趣,所以没有任何帮助。
      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多