onclick方法中的Firebase addListener

时间:2017-12-06 17:12:33

标签: android firebase firebase-realtime-database

是否可以在按钮的onClick方法中附加firebase数据库侦听器?

我将datareference.addValueEventListener放在onClick方法中,但是当我点击按钮并尝试更新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();
}

这是我的更新方法,我没有在这里放任何东西,但它仍然崩溃

 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);
}

这是异常,似乎有一个空指针异常。 我在stackOverflow上看了一个类似的问题,它说我应该“只听我感兴趣的bussniness”..但我的引用已经指向具有特定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)

是的,您可以在addValueEventListener方法

中添加onClick

但要在firebase数据库上执行更新,您需要在addValueEventListener

之外执行此操作

答案 1 :(得分:0)

代码中的问题是curren_uid返回null。您无法将null值的参数传递给child()方法。为了解决此问题,您需要检查身份验证过程。

所以要回答你的问题,是的,可以在按钮的onClick方法中附加Firebase监听器。