2016-05-04 18 views
7

Realm ve Recyclerview öğelerini öğreniyorum. Öğeleri basitçe ekleyebileceğiniz ve silebileceğiniz basit uygulamalar yaptım. Öğeyi tek tek silmeye başladığım kadar her şey iyi çalışıyor. Ben silmek tıklayın çok son öğe azından istisna banajava.lang.IllegalStateException: Nesne artık Realm tarafından yönetilmiyor. Silindi mi?

java.lang.IllegalStateException: Object is no longer managed by Realm. Has it been deleted? 

vermek Bu benim kod İşte

@Override 
    public void onDeleteClick(int position) { 
     mRealm.beginTransaction(); 
     mResult.get(position).deleteFromRealm(); 
     mRealm.commitTransaction(); 
     adapter.notifyItemRemoved(position); 
    } 

olduğunu tam yığınına yardım Christian Melchior için

java.lang.IllegalStateException: Object is no longer managed by Realm. Has it been deleted? 
                      at io.realm.internal.InvalidRow.getStubException(InvalidRow.java:192) 
                      at io.realm.internal.InvalidRow.getString(InvalidRow.java:88) 
                      at io.realm.PersonsRealmProxy.realmGet$firstName(PersonsRealmProxy.java:67) 
                      at techiespk.realmpractice.Persons.getFirstName(Persons.java:22) 
                      at techiespk.realmpractice.MyListAdapter.onBindViewHolder(MyListAdapter.java:44) 
                      at techiespk.realmpractice.MyListAdapter.onBindViewHolder(MyListAdapter.java:15) 
                      at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5471) 
                      at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5504) 
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4741) 
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617) 
                      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994) 
                      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390) 
                      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353) 
                      at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574) 
                      at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028) 
                      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2906) 
                      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3283) 
+2

sonra

@Override public void onBindViewHolder(MyListViewHolder holder, int position) { Persons p = persons.get(position); holder.firstName.setText(p.getFirstName()); holder.lastName.setText(p.getLastName()); } 

önce bu

yaparak kodumu sabit. Bir çözüm, 'onBindViewHolder' yönteminizde' obj.isValid() 'işlevini kullanmak ve bu olduğunda" silindi "durumunu kullanmak olacaktır. –

cevap

7

Tamam sayesinde. Ben Görünüşe nesne silindi sonra `firstName` okumaya çalışıyoruz

@Override 
    public void onBindViewHolder(MyListViewHolder holder, int position) { 

     if (persons.get(position).isValid()) { 
      Persons p = persons.get(position); 
      holder.firstName.setText(p.getFirstName()); 
      holder.lastName.setText(p.getLastName()); 
     } 
    }