我正在使用 android studio 和 firebase 实时数据库创建一个简单的应用程序。当用户注册他的数据时,它会保存在 firebase 提供的 Uid 下。然后我在 Uid 中创建了另一个名为“PATH”的节点,我想在其中存储用户提供的一些数据。为此,我想创建特定的 id 或其他内容,以便每次用户输入新数据时都不会被替换。(检查截图)
我试图通过使用 Datasnapshot 来做到这一点,但它没有响应点击。这是我试过的。
add_new.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( !Validate_text() ){
return;
}
else{
//Toast.makeText(getApplicationContext(), picker.getDayOfMonth() + "-" + picker.getMonth() + "-" + picker.getYear(), Toast.LENGTH_SHORT).show();
// redirect to path
String ach = milestone.getEditText().getText().toString().trim();
int day = picker.getDayOfMonth();
int month = picker.getMonth();
int year = picker.getYear();
String date = day + "/" + month + "/" + year ;
reference.child(uid).child("PATH").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for( DataSnapshot random_key : snapshot.getChildren()) {
String key = random_key.getKey();
Map<String, Object> updates = new HashMap<String, Object>();
updates.put("Achievement : ", ach);
updates.put("Date", date);
reference.child(uid).child("PATH").child(key).updateChildren(updates).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void unused) {
Toast.makeText(getApplicationContext(), "Your achievement has been updated.", Toast.LENGTH_LONG).show();
finish();
startActivity(new Intent(AddPath.this, Path.class));
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.v(TAG, error.getMessage());
}
});
}
}
});
如果有人知道我在这里做错了什么或可以提供帮助,非常欢迎您。
我希望您像这样构建数据库 json。
-users
-userUid
-name: "Ticherhaz"
-others: "Master"
-userUid2
-name: "Pyke"
-others: "Bronze"
-path
-userUid
-pathUid
-achievement: "Eat without using hand"
-date: "12/02/2022"
-pathUid2
-achievement: "Wake up early"
-date: "12/02/2022"
-userUid2
-pathUid3
-achievement: "Feeding team"
-date: "13/02/2022"
既然您说要创建随机 Uid,您可以使用 Firebase pushId
。您可以在此处参考Firebase 推送 ID。
add_new.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( !Validate_text() ){
return;
}
else{
String ach = milestone.getEditText().getText().toString().trim();
int day = picker.getDayOfMonth();
int month = picker.getMonth();
int year = picker.getYear();
String date = day + "/" + month + "/" + year ;
Map<String, Object> updates = new HashMap<String, Object>();
updates.put("Achievement : ", ach);
updates.put("Date", date);
final String pushId = FirebaseDatabase.getInstance().getReference().push().getKey(); //Create new random Id
FirebaseDatabase.getInstance().getReference().child("path").child(uid).child(pushId).setValue(updates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getApplicationContext(), "Your achievement has been updated.", Toast.LENGTH_LONG).show();
finish();
startActivity(new Intent(AddPath.this, Path.class));
}
});
}
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句