如何在Firebase Realtime数据库中的特定子树中推送值

时间:2019-12-06 04:49:52

标签: android firebase firebase-realtime-database hashmap

我正在尝试将具有名称的url上传到Firebase数据库中的特定树状子节点。

代码:

public void UploadData(View view){

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/gif");
        startActivityForResult(intent,ImageBack);

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Folder = FirebaseStorage.getInstance().getReference().child("ImageFolder");
        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView2);
        source2 = textView.getText().toString();

        if(requestCode == SELECT_VIDEO){
            if(resultCode == RESULT_OK){
                Uri ImageData = data.getData();

                final StorageReference Imagename = Folder.child("image" + ImageData.getLastPathSegment());

          Imagename.putFile(ImageData).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

               //         Toast.makeText(realupload.this, "Uploaded", Toast.LENGTH_SHORT).show();

                        Imagename.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {

                DatabaseReference imageStore = FirebaseDatabase.getInstance().getReference().child("main");
                                HashMap<String,String> hashMap = new HashMap<>();
                                hashMap.put(source2, String.valueOf(uri));

              imageStore.setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                             Toast.makeText(realupload.this, "Finally Completed", Toast.LENGTH_SHORT).show();
                                    }
                                });

                            }
                        });
                    }
                });
            }
        }
    }

子树“ main”是要向其添加值的子树。 enter image description here

当前,当我使用它时,它将覆盖Firebase数据库中“主”子树中的所有值。我该如何更改它,以使其不覆盖我的“主”子树,而只需在其下添加另一个带有值的名称即可。

3 个答案:

答案 0 :(得分:2)

  

如何更改此设置,以免覆盖我的“主”子树,而只需在其下添加另一个带有值的名称。

您可以使用updateChildren()方法:

    Map<String, Object> childUpdates = new HashMap<>();
    childUpdates.put("food","all" );
        mDatabase.updateChildren(childUpdates);

更多信息在这里:

https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields

答案 1 :(得分:1)

简单地说,您只需要更新价值即可。要获取更新值,请使用此代码imageStore. updateChildren(hashMap)来更新值

或者您可以替换以下代码。

public void UploadData(View view){

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/gif");
        startActivityForResult(intent,ImageBack);

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Folder = FirebaseStorage.getInstance().getReference().child("ImageFolder");
        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView2);
        source2 = textView.getText().toString();

        if(requestCode == SELECT_VIDEO){
            if(resultCode == RESULT_OK){
                Uri ImageData = data.getData();

                final StorageReference Imagename = Folder.child("image" + ImageData.getLastPathSegment());

          Imagename.putFile(ImageData).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

               //         Toast.makeText(realupload.this, "Uploaded", Toast.LENGTH_SHORT).show();

                        Imagename.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {

                DatabaseReference imageStore = FirebaseDatabase.getInstance().getReference().child("main");
                                HashMap<String,String> hashMap = new HashMap<>();
                                hashMap.put(source2, String.valueOf(uri));

              imageStore. updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                             Toast.makeText(realupload.this, "Finally Completed", Toast.LENGTH_SHORT).show();
                                    }
                                });

                            }
                        });
                    }
                });
            }
        }
    }

有关更多信息,https://stackoverflow.com/a/41296760/9315408

答案 2 :(得分:1)

您需要找到一个指定密钥进行更新。

imageStore.child("cinta").setValue("value")