0

私はアンドロイドスタジオで作業しており、デバイスの内部ストレージのファイルに保存されているデータを ListView に入力しようとしています。ファイルがあるため、アイテムの正確な数でリストを作成できますが、それらはすべて異なる情報を表示するはずです。現時点では、それらはすべて ArrayList の最初の項目と同じデータを表示しています。

コードは次のとおりです。

 ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
        File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);

        int counter = 0;

        int fileNameNumber = 1;

        filename = "newAssessment(" + fileNameNumber + ").json";

        internalFile = new File(directory, filename);

        JSONObject jsonObject;

        while (internalFile.exists()) {

            files.add(counter, internalFile);

            try {
                FileInputStream fis = new FileInputStream(internalFile);
                DataInputStream in = new DataInputStream(fis);
                BufferedReader br = new BufferedReader(new InputStreamReader(in));

                String strLine;

                while ((strLine = br.readLine()) != null) {
                    myData = myData + strLine;
                }
            }catch(IOException e){
                e.printStackTrace();
            }

                try {
                    jsonObject = new JSONObject(myData);

                    String assessmentDate = jsonObject.getString("assessmentDate");
                    String orchard = jsonObject.getString("orchard");

                    data.add(counter, assessmentDate + " : " + orchard);
                }catch(JSONException e){
                    e.printStackTrace();
                }

                counter++;
                fileNameNumber++;


            filename = "newAssessment(" + fileNameNumber + ").json";

            internalFile = new File(directory, filename);
        }

        LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));

別のデータが保存されていることが確認できます。最初に来るアイテムを変更すると、配列はすべてのアイテムを変更します。

助けてくれてありがとう。

4

3 に答える 3

1

外部 while ループで myData を初期化していません。そのため、myData を外部の while ループで初期化します。

while (internalFile.exists()) {

            files.add(counter, internalFile);

            try {
                FileInputStream fis = new FileInputStream(internalFile);
                DataInputStream in = new DataInputStream(fis);
                BufferedReader br = new BufferedReader(new InputStreamReader(in));

                String strLine;

                while ((strLine = br.readLine()) != null) {
                    myData = myData + strLine;
                }
            }catch(IOException e){
                e.printStackTrace();
            }

                try {
                    jsonObject = new JSONObject(myData);

                    String assessmentDate = jsonObject.getString("assessmentDate");
                    String orchard = jsonObject.getString("orchard");

                    data.add(counter, assessmentDate + " : " + orchard);
                }catch(JSONException e){
                    e.printStackTrace();
                }

                counter++;
                fileNameNumber++;
                myData = "";


            filename = "newAssessment(" + fileNameNumber + ").json";

            internalFile = new File(directory, filename);
        }

        LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));
于 2016-04-26T04:26:36.097 に答える
1

問題はここにあります:

while ((strLine = br.readLine()) != null) {
                myData = myData + strLine;
            }

while ループが再び繰り返されるとき、 myData には古いデータがまだ残っています。上記のwhileループが再び繰り返される前に、myDataを新しい文字列に初期化する必要があります。

myData = "";
while ((strLine = br.readLine()) != null) {
                myData = myData + strLine;
            }
于 2016-04-26T04:36:11.930 に答える
0

json オブジェクトからすべてのデータを取得して myData に追加するには、for ループを使用する必要があります。

于 2016-04-26T04:15:41.353 に答える