是否可以在按钮的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)
答案 0 :(得分:0)
是的,您可以在addValueEventListener
方法
onClick
但要在firebase数据库上执行更新,您需要在addValueEventListener
答案 1 :(得分:0)
代码中的问题是curren_uid
返回null
。您无法将null
值的参数传递给child()
方法。为了解决此问题,您需要检查身份验证过程。
所以要回答你的问题,是的,可以在按钮的onClick方法中附加Firebase监听器。