如何在java中存储持久数据

时间:2013-05-16 17:34:35

标签: java android android-sdcard

我对java很新,并根据我读过的内容做了一些假设,所以如果我错了请纠正我。

我正在制作一个从SD卡下载JSON数据的Android应用程序,然后您可以通过过滤进行搜索。

如果我在javascript中执行此操作,我只需将数据保存到全局变量并随时访问它。但是(从我读过的一点点开始),java没有全局变量,它所具有的相似之处并不是真正明智的使用。

所以我现在所做的是,每次新的搜索开始时,我都会再次从SD卡下载所有数据。但这似乎非常低效。我已经阅读了一些关于Singletons和Builders的内容,我想也许这就是我正在寻找的东西(我真的在黑暗中磕磕绊绊),但我真的不明白在这种情况下如何实现它们,或者如果它们实际上是最好的解决方案。

如果它有所不同,那么在应用程序运行时数据永远不会改变。

有人可以给我一些关于最佳方法的指示吗?我真的只想在应用程序加载时获取一次数据,然后能够在以后随时访问它。如果它有帮助,这是我用来从SD卡获取数据的代码......

public static JSONArray getArray(){

    FileInputStream stream = null;

    String jString = null;
    File yourFile = new File("/mnt/extSdCard/app/thejson.json");

    try {
        stream = new FileInputStream(yourFile);
        FileChannel fc = stream.getChannel();
        MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
        /* Instead of using default, pass in a decoder. */
        jString = Charset.defaultCharset().decode(bb).toString();

        } catch (FileNotFoundException e) {
        Log.i("err", "file not found");
    }
    catch (IOException e) {
        Log.i("err", "IO exception");
    }
    try {
        stream.close();
        } catch (IOException e) {
        Log.i("1", "IO exception");       
    }
    try {
        names = new JSONArray(jString);
        } catch (JSONException e1) {
            Log.i("err", "IO exception");
    }
    return names;
}     

2 个答案:

答案 0 :(得分:1)

您可以在Java中以几种不同的方式保存数据。如果要在许多不同的类之间共享数据,可以在一个类中创建一个变量并将其称为公共,或者可以创建一个返回所需值的公共静态返回方法(在这种情况下,该变量是私有的)。无论类是否包含包含该方法的对象,都可以访问静态方法。另一种存储数据的方法,虽然我不建议这样做,但我推荐静态方法,就是创建一个接口并让所有类使用数据实现该接口。

答案 1 :(得分:0)

只需将您的“名称”JSON数组作为主要活动中的成员变量,只要您的活动存在,您就可以访问它。