【问题标题】:Read and Write files from internal storage within a fragment从片段内的内部存储读取和写入文件
【发布时间】:2013-11-20 08:34:22
【问题描述】:

我有一个具有SplashScreenMainActivity 的应用程序。在MainActivity 中,FrameLayout 被片段替换。但这只是一个基本的理解,我认为我的问题并不需要它。

在我的 SplashScreen 中,我正在检查内部存储中是否存在文件。如果是这样,它就会被读出。如果没有,它会从互联网上下载。到目前为止,一切都很好。现在,当用户在 MainActivity 中时,他有不同的选择。根据该选项,将打开一个片段并显示数据。这个数据不一样。所以现在我想在 SplashScreen 中做同样的事情。检查文件是否存在。如果是,请阅读,否则请从 Internet 下载。我遇到的问题是,似乎无法通过 Fragments 进行读写。对吗?

片段为 AsyncTask 加注星标,应该在那里进行下载。

这是我在片段中用于写入文件的代码

private void writeToFile(String data, String filename) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput( filename, MODE_PRIVATE));
        outputStreamWriter.write(data);
        outputStreamWriter.close();
    }
    catch (IOException e) {
        Log.e("Exception", "File write failed: " + e.toString());
    } 
}

但我遇到的问题是 MODE_PRIVATE - 我遇到的错误是 MODE_PRIVATE cannot be resolved to a variable 。如何在片段中将模式设置为私有?

然后,当我想读取文件时,它会像这样在 SplashScreen 中工作

inputStream = openFileInput ( filepath )

但是在片段中我得到了错误

The method openFileInput(String) is undefined for the type WeekFragment.MainAsyncTask

我究竟如何在片段中写入和读取文件?

【问题讨论】:

    标签: java android android-fragments android-asynctask


    【解决方案1】:

    MODE_PRIVATEContext 类的常量。因此,您可以使用Context.MODE_PRIVATE 从任何地方访问它。

    所以在你的代码中使用像

    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(getActivity().openFileOutput( filename, Context.MODE_PRIVATE));
    

    【讨论】:

    • 嘿,当我这样做时,方法 openFileOutput 出现错误,错误为 The method openFileOutput(String, int) is undefined for the type WeekFragment
    • 为此使用getActivity().openFileOutput
    • 非常欢迎您.. 恭喜您解决了您的问题 :)
    • 不要那样做。请改用Context c = getActivity();。您不能为 Activity 执行 new MainActivity()。还有一件事,你正在使用c.MODE_PRIVATE,因为常量是类变量,所以你应该使用Context.MODE_PRIVATE
    • 所以应该是 c.getApplicationContext().openFileOutput ( filepath, Context.MODE_PRIVATE ,对吧?那行得通!谢谢。接受我的投票
    【解决方案2】:

    这在片段中对我有用

    //reading text from the file
    FileInputStream fileIn = getActivity().openFileInput("FragmentFile.txt");
    

    //write text to file
    try {
    FileOutputStream fileout = getActivity().openFileOutput("FragmentFile.txt", MODE_PRIVATE);
                            OutputStreamWriter outputWriter = new OutputStreamWriter(fileout);
                            outputWriter.write(response.toString());
                            outputWriter.close();
                        } catch (Exception e) {
                            e.printStackTrace();
    }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多