2017-05-23 23 views
0

這是我在Recyclerview的onBindViewHolder中的代碼,它從列表和Realm DB中刪除所選的 項目。Recyclerview強制關閉中的Android Realm數據庫

@Override 
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v= LayoutInflater.from(c).inflate(R.layout.listing,parent,false); 
    return new MyHolder(v); 
    } 

holder.cardview.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 

      RealmResults<Sample> results = realm.where(Sample.class).findAll(); 

      realm.beginTransaction(); 
      results.remove(position); 
      realm.commitTransaction(); 


      return false; 
     } 
    }); 

這是持有人的代碼。

public class MyHolder extends RecyclerView.ViewHolder { 

    TextView in_name,in_address,in_age; 
    ImageView profile_img; 
    CardView cardview; 

    public MyHolder(View itemView) { 
     super(itemView); 

     in_name= (TextView) itemView.findViewById(R.id.in_name); 
     in_address= (TextView) itemView.findViewById(R.id.in_address); 
     in_age= (TextView) itemView.findViewById(R.id.in_age); 
     profile_img= (ImageView) itemView.findViewById(R.id.profile_img); 
     cardview = (CardView) itemView.findViewById(R.id.cardview); 
    } 
} 

代碼的結果是所選擇的項目被刪除,但應用程序力關閉給 跟隨誤差。

FATAL EXCEPTION: main 
Process: cozycodes.project.realmsample, PID: 20629 
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.ViewParent.showContextMenuForChild(android.view.View)' on a null object reference 
at android.view.View.showContextMenu(View.java:4853) 
at android.view.View.performLongClick(View.java:4822) 
at android.view.View$CheckForLongPress.run(View.java:19840) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

我已經完成了我的MainActivity的onCreate和OnDestroy。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    sample_recyclerview= (RecyclerView) findViewById(R.id.sample_recycler); 
    sample_recyclerview.setLayoutManager(new LinearLayoutManager(this)); 

    this.realm = RealmConnect.with(this).getRealm(); 



    final RealmConnect helper=new RealmConnect(realm); 
    helper.retrieveFromDB(); 


    adapter=new SampleAdapter(this,helper.justRefresh()); 
    sample_recyclerview.setAdapter(adapter); 


    realmChangeListener=new RealmChangeListener() { 
     @Override 
     public void onChange() { 

      adapter=new 
SampleAdapter(MainActivity.this,helper.justRefresh()); 
      sample_recyclerview.setAdapter(adapter); 
     } 
    }; 


    realm.addChangeListener(realmChangeListener); 

    FloatingActionButton fab = (FloatingActionButton) 
    findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      displayInputDialog(); 
     } 
    }); 
} 


@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    realm.removeChangeListener(realmChangeListener); 
    realm.close(); 
} 
+0

不清楚爲什麼上下文菜單試圖打開。你註冊了嗎? –

+0

不,我還沒有註冊。 – Marisaluht

+0

請提供您的main.java類代碼 –

回答

-1

我沒有確切的想法你的問題是什麼,但我有一個從recyclerView刪除領域數據的問題。使用realm.copyFromRealm在從領域獲取數據的同時複製數據。

realm.copyFromRealm(YOUR REALM QUERY) 

例如

cities.addAll(realm.copyFromRealm(realm.where(CityDataBean.class).findAll())); 
+0

這是我的向Realm添加數據的查詢示例s = realm.copyToRealm(sample); – Marisaluht

+0

我認爲這個問題與realm或recyclerview無關。顯示showContextMenuForChild的日誌正在空對象引用上調用。所以你的問題是關於contextMenu。再次檢查 –

+0

可怕的做法。 Downvoted。 – EpicPandaForce

0

堆棧跟蹤指示顯然存在空指針參考:

java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.ViewParent.showContextMenuForChild(android.view.View)' on a null object reference 
1
RealmResults<Sample> results = realm.where(Sample.class).findAll(); 
Sample b = results.get(position); 
String title = b.getName(); 
realm.beginTransaction(); 
results.remove(position); 
realm.commitTransaction(); 

我放置這段代碼警告對話框內部和它的工作爲我。