【问题标题】:How to Get Application Data Dir in Android如何在 Android 中获取应用程序数据目录
【发布时间】:2014-05-27 12:05:32
【问题描述】:

如何在 Android Fragment 或标准 Java 类(不是 Activity)中获取应用程序数据目录。

我正在做一个需要使用序列化在 Android 中执行 CRUD 操作的作业。到目前为止,我有一个标准的 Java 类,可以像这样执行读写操作

private void readFile() {
    try{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
        books = (List<Book>)ois.readObject();
        ois.close();
    }catch (Exception e){
        Log.e(TAG, e.getMessage());
    }
}

private void writeFile(){
    try {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
        oos.writeObject(books);
        oos.flush();
        oos.close();
    } catch (Exception e){
        Log.e(TAG, e.getMessage());
    }
}

问题是这个类的构造函数需要像这样传递一个String DataDir

公共类 BookSvcSioImpl 实现 IBookSvc {

private final String TAG = "BookSvcSioImpl";
private List<Book> books = null;
private String dataDir = null;
private String filePath = dataDir + "/myBooks.sio";    


public BookSvcSioImpl(String appDataDirectory){
    this.dataDir = appDataDirectory;
    readFile();
}

我使用这个字符串参数来构造文件路径。我的问题是如何在片段或不是 Activity 的标准 Java 类中获取应用程序数据目录。在 Activity 中,我可以通过调用 getApplicationInfo.DataDir 来获取它

  String dataDir = getApplicationInfo().dataDir;
                BookSvcSioImpl sioService = new BookSvcSioImpl(dataDir);
                sioService.create(enteredBook);

我无法在 Fragment 或 Java 类中执行此操作。

【问题讨论】:

    标签: java android serialization android-fragments


    【解决方案1】:

    我无法在片段中执行此操作

    Fragment 上调用getActivity() 以获取承载片段的Activity

    请注意,Activity(或其他Context)上的getFilesDir()getApplicationInfo().dataDir 更好,因为我不知道dataDir 是否可以调整以处理平板电脑上的多个帐户。

    【讨论】:

    • 谢谢你,马克,成功了。此外,我读你的书也很有价值。
    • @ValOkafor:很高兴你喜欢它!
    猜你喜欢
    • 2011-06-11
    • 2019-11-18
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2014-11-17
    • 2012-03-02
    相关资源
    最近更新 更多