0

私は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;
}     
4

2 に答える 2

1

Java では、いくつかの異なる方法でデータを保存できます。多くの異なるクラス間でデータを共有したい場合は、1 つのクラスで変数を作成してそれを public と呼ぶか、目的の値を返す public static return メソッドを作成できます (この場合、変数は private です)。メソッドを含むオブジェクトがクラスに含まれているかどうかに関係なく、静的メソッドにアクセスできます。データを保存するもう 1 つの方法は、静的メソッドをお勧めしますが、これはお勧めしませんが、インターフェイスを作成し、データを使用するすべてのクラスにそのインターフェイスを実装させることです。

于 2013-05-16T17:48:16.353 に答える
0

「名前」の JSON 配列をメイン アクティビティのメンバー変数にするだけで、アクティビティが存続している限りアクセスできます。

于 2013-05-16T17:47:20.200 に答える