2016-05-04 16 views
7

Tôi học về Realm và Recyclerview. Tôi đã thực hiện ứng dụng đơn giản, nơi bạn có thể đơn giản thêm các mục và xóa chúng. Mọi thứ đều hoạt động tốt cho đến khi tôi bắt đầu xóa từng mục một. Tại mục cuối cùng khi tôi nhấp vào xóa nó cho tôi ngoại lệjava.lang.IllegalStateException: Đối tượng không còn được quản lý bởi Realm. Nó đã bị xóa chưa?

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

Đây là mã của tôi

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

Ở đây có đầy đủ chồng

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

Bạn đang dường như cố gắng để đọc 'firstName' sau khi đối tượng đã bị xóa. Một giải pháp sẽ là sử dụng 'obj.isValid()' trong phương thức 'onBindViewHolder' của bạn và sử dụng trạng thái" đã xóa "khi điều đó xảy ra. –

Trả lời

7

nhờ Ok để Christian Melchior để được giúp đỡ. Tôi cố định mã của tôi bằng cách làm

này

Trước

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

Sau

@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()); 
     } 
    } 
Các vấn đề liên quan