2016-03-22 19 views
0

Bir klasörde belirli dosyaları arayan ve paylaşılan tercihleri ​​için adreslerini (artı diğer 3 özniteliği) kaydeden bir sınıf yazdım, ardından özel bağdaştırıcımda bir yöntem çağrısı yapıyorum (yöntemi (getAllItems olarak adlandırılır) verileri paylaşılan tercihlerden okur, yeni özel nesneleri başlatır ve bunları bir listeye ekler ve listeyi döndürür. Bu, en büyük yüklemenin gerçekleştiği kısımdır) ve ardından bağdaştırıcı bu öğeler listesini kullanır.Geridönüştürme seti Bağdaştırıcıyı senkronize olarak ayarlama

E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1 
     Process: com.amir.example, PID: 4968 
     java.util.ConcurrentModificationException 
      at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787) 
      at java.util.HashMap$KeyIterator.next(HashMap.java:814) 
      at com.android.internal.util.XmlUtils.writeSetXml(XmlUtils.java:355) 
      at com.android.internal.util.XmlUtils.writeValueXml(XmlUtils.java:693) 
      at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:300) 
      at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:269) 
      at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:235) 
      at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:192) 
      at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:600) 
      at android.app.SharedPreferencesImpl.-wrap2(SharedPreferencesImpl.java) 
      at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:515) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
      at java.lang.Thread.run(Thread.java:818) 
: her öğeden adresini almak bir Bitmap oluşturmak ve recyclerView bu onları göstermek i alıyorum hatadır 210 dosya sayısı az olduğunda (100 dosyadan 20 eşleşme gibi) uygulama iyi çalışıyor ancak çok fazla olduğunda (8000 dosyadan 200 öğe gibi) uygulama çöküyor

Yüklemeye çalıştım uyumsuz adaptörün içine öğeleri: Bu yılında MainActivity.java

public class AsyncAdapter extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 

     //This line will load the files into shared preferences (DataSource is my sharedPreferences) 
     Loader.loadPhoneStickers(adapter.getDataSource()); 

     //this will cause the list that the adapter is attached to, to get updated and load all the items that were added to shared preferences 
     //this method will make a call to getAllItems and notifyItemRangeChanged 
     adapter.refresh(); 
     return null; 
    } 
} 

ama hata i (adaptör ayarı gerçekleşecek tüm yükleme neden olur) ya da uyumsuz adaptörü kurarım olsun aynı kalır eşzamanlı olarak

Yüklemeyi nereye yapmalıyım? otto'un herhangi bir yardımı olacak mı?

cevap

1

Bu yöntemi, asynctask içinde ve ui iş parçacığı üzerinde çalışan postexecute içinde geçersiz kılmanız gerekir. Adaptörünü ui Thread'den yenileyemezsiniz.

public class AsyncAdapter extends AsyncTask<Void, Void, Void> { 
@Override 
protected Void doInBackground(Void... params) { 

    //This line will load the files into shared preferences (DataSource is my sharedPreferences) 
    Loader.loadPhoneStickers(adapter.getDataSource()); 

    //this will cause the list that the adapter is attached to, to get updated and load all the items that were added to shared preferences 
    //this method will make a call to getAllItems and notifyItemRangeChanged 
    return null; 
    } 

@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 

     adapter.refresh(); 
    } 
} 

Genel olarak farklı bir iş parçasında çalışırken, ui öğeleriyle etkileşimde bulunamazsınız. Genel uygulama asynctask içinde postExecute kullanmaktır.Post execute doInbackground bittikten hemen sonra çağrılır ve tüm UI ile ilgili şeyler yapabileceğiniz UI iş parçacığı üzerinde çağrılır.

+0

şimdiki çalışma sayesinde ... bu konuda yarım gün geçirdiğine inanamıyorum. anlamadığım şey, neden küçük dosya kümeleri üzerinde çalışıyordu .. –