关于使用android studio在firebase实时数据库中的uid下创建随机密钥
Posted
技术标签:
【中文标题】关于使用android studio在firebase实时数据库中的uid下创建随机密钥【英文标题】:About creating a random key under Uid in firebase realtime database using android studio 【发布时间】:2021-09-30 12:49:57 【问题描述】:我正在使用 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());
);
);
如果有人知道我在这里做错了什么或可以提供帮助,非常欢迎。
【问题讨论】:
【参考方案1】:我希望你像这样构建你的数据库 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 Push 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));
);
);
【讨论】:
非常感谢@TicherhazFreePalastine。你的解决方案奏效了。正如你提到的,我也重新安排了结构。再次感谢你..以上是关于关于使用android studio在firebase实时数据库中的uid下创建随机密钥的主要内容,如果未能解决你的问题,请参考以下文章
关于在Firebase auth Uid下检索嵌套数据并使用android studio推送uid