【问题标题】:how to store persistent data in java如何在java中存储持久数据
【发布时间】:2013-05-16 17:34:35
【问题描述】:

我对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;
}     

【问题讨论】:

  • 是什么让你认为 Java 没有全局变量?只需在您的一个类中创建一个静态对象并使用MyClass.myObject 访问它。
  • 我是在匆忙中捡起这个,所以对我正在阅读的内容有半点理解 - 我猜当人们在this thread 中说 java 中没有全局变量时,我有点接受它字面上地。感谢您的回复。

标签: java android android-sdcard


【解决方案1】:

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

【讨论】:

  • 注意,这不是持久化数据存储,但是如果你想在你的应用完全关闭后保存数据,你只需要持久化存储,这是不必要的。
  • 谢谢。我最终在启动画面活动开始时声明 public static JSONArray names;,然后在最后声明 final JSONArray names; - 似乎工作正常 - 如果有任何缺点,我会全力以赴。
  • 只是出于好奇,您使用最终数组做什么?另外,如果这是您使用的解决方案,您能否将我的答案设置为已接受的答案?
  • 最终的数组被用作基础数据——然后另一个类在返回结果之前根据用户输入抓取它并过滤它。接受的答案 - 对不起,也是一个新手
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2013-04-07
    • 2011-11-24
    • 2012-12-01
    • 2014-03-30
    相关资源
    最近更新 更多