ファイルにデータを保存するために 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();
}