2013-07-10 3 views
-1

Нижеуказанный метод вызывается из разных мест в AsynTask. Он кодируется для Android. Получение ConcurrentModificationException. Как сделать этот метод поточноConcurrentModificationException

public static String saveJsonFile(File dir, String name, JSONObject data) { 
     final File file = new File(dir.getPath() + File.separator + name); 
     try { 
      file.createNewFile(); 
     } catch (final IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     BufferedWriter printWriter = null; 

     try { 
      printWriter = new BufferedWriter(new FileWriter(file), 8192); 
      // printWriter = new PrintWriter(file); 
      if (data != null) 
       data.write(printWriter); // java.util.ConcurrentModificationException 



         ........ 
         ........ 
+1

Где JSONObject.write()? Я не попал на http://developer.android.com/reference/org/json/JSONObject.html –

+0

Это специальный метод, добавленный для записи данных в файл. У меня нет доступа к нему, теперь он составлен как Jar. На самом деле это org.json.douglascrockford.JSONObject –

+0

@ Vinayak.B В этом классе есть два метода (другой конструктор), которые мутируют базовую карту. Вы когда-нибудь вызывали 'put' или' popuplate' в JSONObject? –

ответ

0

Вы могли бы сделать что-то вроде этого:

private final Object lock = new Object(); 

public static String saveJsonFile(File dir, String name, JSONObject data) { 
    final File file = new File(dir.getPath() + File.separator + name); 
    try { 
     file.createNewFile(); 
    } catch (final IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    BufferedWriter printWriter = null; 

    try { 
     printWriter = new BufferedWriter(new FileWriter(file), 8192); 

     synchronized(lock) { 
      if (data != null) 
       data.write(printWriter); // java.util.ConcurrentModificationException 
       //... 
0

сделать код synchronized на data:

synchronized(data) { 
    try { 
     printWriter = new BufferedWriter(new FileWriter(file), 8192); 
     // ... 
    } 
} 
+0

Не повезло с это получение того же исключения –

Смежные вопросы