2017-12-06 8 views
1

ボタンのonClickメソッドでfirebaseデータベースリスナをアタッチすることはできますか?onclickメソッドのFirebase addListener

onClickメソッドにdatareference.addValueEventListenerを入れましたが、ボタンをクリックしてfirebaseの値を更新しようとするとクラッシュします。

新しいオブジェクト全体を作成し、setvalueを使用して古い値を置き換えますか?私の場合、私は、ユーザーのポイントを更新すると、ここに私のonClickメソッドは、ここで

public void itemClick(View view) { 
    int position; 
    position = (Integer) view.getTag(); 
    if (taskList.get(position).getWorker()!=null && taskList.get(position).getWorker().compareTo(userEmail)==0) { 
     if (taskList.get(position).getStates().compareTo("COMPLETE")==0) 
      Toast.makeText(getContext(), getString(R.string.already_complete), Toast.LENGTH_LONG).show(); 
      taskList.get(position).setStates("COMPLETE"); 
      db.updateStates(taskList.get(position).getStates(), taskList.get(position).getName()); 
      Double awardpoint = taskList.get(position).getPoints(); 
      update(awardpoint); 
      search(); 
      Toast.makeText(getContext(), getString(R.string.successful_complete), Toast.LENGTH_LONG).show(); 
     }else 
      Toast.makeText(getContext(), getString(R.string.fail_complete), Toast.LENGTH_LONG).show(); 
} 

である私の更新方法ですが、私はここに何を入れてdidntの、それはまだ

private void update (Double point){ 
    databaseReference.child("points").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

をクラッシュ} はここにここに私のonCreateメソッド

public void onCreate(){ 

    currentUser = FirebaseAuth.getInstance().getCurrentUser(); 
    String curren_uid = currentUser.getUid(); 
    databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(curren_uid); 
} 

で例外であり、それはNULLポインタ例外がありますようです。 私はstackOverflowでsimliarの質問を見ました。そして、私は "私が興味を持っているビジネスだけを聞いてください"と言いますが、私の参考文献は特定のuidを持つユーザを指しています。

12-06 20:17:47.401 4399-4399/ca.uottawa.leyaoli.seg2105_final_project E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: ca.uottawa.leyaoli.seg2105_final_project, PID: 4399 
                        java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)' on a null object reference 
                         at ca.uottawa.leyaoli.seg2105_final_project.Tab2.update(Tab2.java:161) 
                         at ca.uottawa.leyaoli.seg2105_final_project.Tab2.itemClick(Tab2.java:153) 
                         at ca.uottawa.leyaoli.seg2105_final_project.TaskListAdapter.onClick(TaskListAdapter.java:93) 
                         at android.view.View.performClick(View.java:6256) 
                         at android.view.View$PerformClick.run(View.java:24701) 
                         at android.os.Handler.handleCallback(Handler.java:789) 
                         at android.os.Handler.dispatchMessage(Handler.java:98) 
                         at android.os.Looper.loop(Looper.java:164) 
                         at android.app.ActivityThread.main(ActivityThread.java:6541) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
+2

エラーメッセージまたはスタックトレースを入力してください。 –

+0

はい可能です –

答えて

0

はい、あなたはaddValueEventListeneronClick内部方法

を追加することができますしかし、あなたのコードに問題がcurren_uid戻りnullということですaddValueEventListener

+0

あなたの2番目の点は間違っています。リスナー内の値を追加/更新/削除することができます。リスナーに使用されているようなデータベース参照だけが必要です。例えば、 'reference.removeValue()'を実行することができます。 – Michael

0

外にあなたがそれを行う必要がありfirebaseデータベースの更新を実行します。 null値の引数をchild()メソッドに渡すことはできません。この問題を解決するには、認証プロセスを確認する必要があります。

あなたの質問に答えるために、はい、ボタンのonClickメソッドにFirebaseリスナを付けることができます。