私はJavaに非常に慣れていないため、読んだ内容に基づいていくつかの仮定を立てているため、間違っている場合は修正してください。
SD カードから JSON データをダウンロードし、フィルタリングして検索できる Android アプリを作成しています。
これを JavaScript で行っている場合は、データをグローバル変数に保存して、いつでもアクセスできます。しかし(私が読んだことから)、Javaにはグローバルがなく、似ているものを使用するのは本当に賢明ではありません。
だから私が今していることは、新しい検索が始まるたびに、SD カードからすべてのデータを再度ダウンロードすることです。しかし、これは恐ろしく非効率的です。シングルトンとビルダーについて少し読んだことがありますが、おそらくそれが私が探しているものだと思います(ここで本当に暗闇の中でつまずいています)が、この場合にそれらを実装する方法がよくわかりません、またはそれらが実際に最善の解決策である場合。
違いが生じる場合、アプリの実行中にデータが変更されることはありません。
誰かがこれを行うための最良の方法についていくつかの指針を教えてもらえますか? アプリの読み込み時に一度データを取得し、後でいつでもアクセスできるようにしたいだけです。それが役立つ場合、これは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;
}