【发布时间】: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