2017-08-01 58 views
-4

我希望能够复制uid(图中蓝色下划线)并将其与当前用户的uid进行比较。而且,只有在同一个uid下没有数据时才写入数据库。这是为了让每个用户只上传一次数据。此代码中的Firebase数据库有什么问题?

Link to the database screenshot

buttonSubmit.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (mDatabaseReference.child("drivers").child(userid).toString() != userid || mDatabaseReference.child("parents").child(userid).toString() != useremail) { 
      if (!radiobutton1.isChecked() && !radiobutton2.isChecked()) { 
       Toast.makeText(LoggedinActivity.this, "Please select either Driver or Parent", Toast.LENGTH_LONG).show(); 
      } else if (radiogroup.getCheckedRadioButtonId() == radiobutton1.getId()) { 
       typestring = "driver"; 
       Users users = new Users(useremail, editText.getText().toString(), typestring); 
       mDatabaseReference.child("drivers").child(userid).setValue(users); 
      } else if (radiogroup.getCheckedRadioButtonId() == radiobutton2.getId()) { 
       typestring = "parent"; 
       Users users = new Users(useremail, editText.getText().toString(), typestring); 
       mDatabaseReference.child("parents").child(userid).setValue(users); 
      } 
     } 
     else { 
      Toast.makeText(LoggedinActivity.this, "Information already submitted", Toast.LENGTH_LONG).show(); 
     }  
    } 
}); 
+3

这段代码有什么问题? –

+1

你没有告诉我们你的问题是什么 - 这意味着我们无法帮助你。 –

+0

如果当前用户的uid下已有数据,则不应该添加数据。但是,如果在当前用户的uid下已经有一个数据,它会替换数据。它不应该这样做 –

回答

0

您需要更改这一行代码:

mDatabaseReference.child("drivers").child(userid).toString() != userid || mDatabaseReference.child("parents").child(userid).toString() != useremail) { 

mDatabaseReference.child("drivers").child(userid).getRef().toString() != userid || mDatabaseReference.child("parents").getRef().child(userid).toString() != useremail) { 

正如你可能看到的,我已经添加了getRef()方法真正得到参考资料。

希望它有帮助。

+0

让我试试这段代码。 –

+0

抱歉,该代码无效。现在正在做的是,如果我在edittext中更改了名称,它会上传数据。并且,它能够将数据上传到驱动器部分和父部分。我希望它能够只向驱动程序或父母上传一次 –

+0

然后相应地更改逻辑。记住,'getRef()'方法是强制性的。 –