Firebase数据库:在哪里存储他们上传密钥?

时间:2018-01-31 19:51:34

标签: android firebase firebase-realtime-database firebase-storage

我无法弄清楚数据库节点的密钥存储位置,以便稍后使用它来查找和删除条目。 现在我将该密钥存储在我的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;
}
}

这是有效的,只是我发现非常少的例子做同样的事情。 有人能指出我正确的方向吗?

1 个答案:

答案 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");