我无法弄清楚数据库节点的密钥存储位置,以便稍后使用它来查找和删除条目。
现在我将该密钥存储在我的Upload
对象中,但我看到有人提到这是不好的做法。我无法在网上找到解释。
现在我按照以下方式上传:
mUploadTask = fileReference.putFile(mImageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_SHORT).show();
Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),
taskSnapshot.getDownloadUrl().toString());
String uploadId = mDatabaseRef.push().getKey();
mDatabaseRef.child(uploadId).setValue(upload);
}
})
然后当我查询我的数据库时,我将密钥存储在同一个上传对象中:
mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mUploads.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
upload.setKey(postSnapshot.getKey());
mUploads.add(upload);
}
mAdapter.notifyDataSetChanged();
mProgressCircle.setVisibility(View.INVISIBLE);
}
这是我的上传课程。他们的关键字段没有出现在数据库中(我不希望它):
public class Upload {
private String mName;
private String mImageUrl;
private String mKey;
public Upload() {
// Needed for Firebase reflection
}
public Upload(String name, String imageUrl) {
if (name.trim().equals("")) {
name = "No Name";
}
mName = name;
mImageUrl = imageUrl;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public String getImageUrl() {
return mImageUrl;
}
public void setImageUrl(String imageUrl) {
mImageUrl = imageUrl;
}
public String getKey() {
return mKey;
}
public void setKey(String key) {
mKey = key;
}
}
这是有效的,只是我发现非常少的例子做同样的事情。 有人能指出我正确的方向吗?
答案 0 :(得分:0)
我只是将我的密钥存储在putExtra中,但你也可以将它存储在sharedPreferences中,我将我的密钥放在putextras中,因为我需要在另一个Activity中使用它。例如。
Intent intent = new Intent(MainActivity.this, UserEdit.class);
intent.putExtra("uid",mDatabase.getKey());
然后我可以在我的UserEdit.class中得到它,如下所示
Intent iin= getIntent();
Bundle b = iin.getExtras();
if(b!=null)
{
final String uid =(String) b.get("uid");
}
另外,您可以将其存储在sharedPrefs值中,如下所示
<强>的onCreate 强>
SharedPreferences sharedprefs =PreferenceManager.getDefaultSharedPreferences(context);
然后只存储值
sharedprefs.edit().putString("key", mDatabaseRef.push().getKey()).apply();
然后在任意位置检索它
sharedprefs.getString("key","error");