2

ファイルにデータを保存するために JSON 形式を使用しています。1 つまたは 2 つのレコードを追加すると、何も問題ありません。それらが正しいことを簡単に確認したり、思いのままに処理したりできます。ただし、3番目のレコードを追加すると、EclipseとAVDがフリーズし、その後応答しないため、プロセスを強制終了する必要があります。理由は以下のコード内にあると思います。どうすればこの問題に対処できるか教えてください。ログは、問題が無限 for ループにないことを示しています。LinkedHashSetが原因でしょうか?

private void writeJSONtoFile(String jsnStr) {
    FileOutputStream fos;
    Set<String> copy = new LinkedHashSet<String>();
    List<String> adds = new ArrayList<String>();
    try {
        File file = getBaseContext().getFileStreamPath("json_local.xml");
        if(file.exists()){
            JSONObject json1=null;
            try {
                json1 = new JSONObject(readData());
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            String fav = json1.toString();
            String record = fav.substring(fav.indexOf('[')+1, fav.indexOf(']'));
            Log.d("RECORD",record);

            int stop = 0;

            for (stop=0; stop < record.lastIndexOf('}');) {
                String rec = record.substring(
                        record.indexOf('{', stop),
                        record.indexOf('}', stop + 1) + 1);
                stop = record.indexOf('}', stop);
                Log.d("RECORD",rec);
                adds.add(rec);


            }
        }
        String record = jsnStr.substring(jsnStr.indexOf('[')+1, jsnStr.indexOf(']'));
        String rec = record.substring(record.indexOf('{'), record.indexOf('}')+1);
        adds.add(rec);
        copy.clear();
        copy.addAll(adds);
        adds.clear();
        adds.addAll(copy);
        int pages=(int) Math.ceil(adds.size()/10.0);
        int total=adds.size();
        String result = "{\"count_page\":"+pages+",\"count\":\""+total+"\",\"results\":[";
        for (String temp : adds) {
            result+=temp;
            result+=",";
        }
        result = result.substring(0, result.length() - 1);
        result+="]}";
        fos = openFileOutput("json_local.xml", Context.MODE_WORLD_WRITEABLE);
        fos.write(result.getBytes());
        Log.i("json_convert", result);
        fos.flush();
        fos.close();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    Log.i("Favorites", "" + jsnStr);
    Toast.makeText(getApplicationContext(),
            item_title + " добавлено в избранное", Toast.LENGTH_SHORT)
            .show();
}
4

0 に答える 0