【问题标题】:Can Android file system be written to from a class that is not an activity?可以从不是活动的类写入 Android 文件系统吗?
【发布时间】:2013-12-18 03:06:57
【问题描述】:

我正在编写一个需要每隔一段时间从 android 文件系统写入和读取的应用程序。该应用程序由一个承载三个不同片段的 ActionBarActivity 组成。我的计划是创建一个模型类来管理我的所有数据并在它认为合适时读取/写入 android 文件系统。到目前为止,我不知道如何让一个不是活动的类访问这些功能。

如果可能的话,我的最终目标是允许 I/O 在模型类中独立工作,以尽可能减少耦合。

这是我试图在我的模型中运行的当前代码。

private String readFromFile() {

    String ret = "";
    Scanner s;

    ArrayList<Player> loadedRosterList = new ArrayList<Player>();
    try {
        InputStream inputStream = openFileInput("applicationRoster.txt");

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                s = new Scanner(receiveString);
                s.useDelimiter(",");

                Player newP = new Player(s.next(), s.next(), s.next());
                loadedRosterList.add(newP);
            }

            inputStream.close();

            currentRoster.replacePlayers(loadedRosterList);
        }
    }
    catch (FileNotFoundException e) {
        Log.e("login activity", "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e("login activity", "Can not read file: " + e.toString());
    }

    return ret;
}

【问题讨论】:

  • Android 项目与任何其他 java 项目一样。只需添加一个新的类文件并在活动中使用它。有什么问题?
  • 我正在尝试创建一个与活动分开的新类。因此,android 现在将允许我直接访问文件系统。我正在尝试找到一种解决方法来保留我的模型。
  • @cmw2379 - 这是不正确的。 Android 不关心您从哪个类访问文件系统,只关心它在哪个进程中运行以及谁拥有它。一些特定的文件访问方法依赖于 Context 对象来找出适当的目录路径,但是您可以按照 Szymon 的建议传递 Context,或者从 Activity 类中的 Context 找出正确的路径,然后保存/传递需要执行文件系统工作的类的实际路径(您无需担心泄漏路径,就像您需要担心泄漏 Context 对象一样)

标签: java android io android-activity


【解决方案1】:

您可以将Context 传递给您的方法:

private String readFromFile(Context context) {

}

注意不要将上下文泄漏到此方法之外,以避免内存泄漏。

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 2011-12-23
    • 2012-10-09
    • 2012-11-05
    • 2023-03-09
    • 2010-12-21
    • 2012-09-12
    • 2015-11-26
    • 2019-11-23
    相关资源
    最近更新 更多