简体   繁体   English

如何在Android Studio中的Firebase中编辑特定孩子的值?

[英]How to edit a specific child's value in Firebase from Android Studio?

Can you help me identify why my code is not working? 您可以帮助我确定为什么我的代码不起作用吗? I want to retrieve the value of the child rate in Firebase and display it on my EditText in Android Studio. 我想在Firebase中检索子rate的值,并将其显示在Android Studio中的EditText上。 Then when another value is entered in the EditText via button , the value of the child rate will be updated. 然后,当通过buttonEditText输入另一个值时,子rate的值将被更新。 Thanks. 谢谢。

package com.example.jordan.grat;

import ...

public class AdminActivity extends AppCompatActivity {

private Button mLogout, mAddDriver, mEditDriver, mUpdateRate;

private DatabaseReference mAdminDatabase;

private EditText mRateField;

private String mRate, mPassword;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin);

    mLogout = (Button) findViewById(R.id.logout);
    mAddDriver = (Button) findViewById(R.id.addDriver);
    mEditDriver = (Button) findViewById(R.id.editDriver);
    mUpdateRate = (Button) findViewById(R.id.updateRate);

    mRateField = (EditText) findViewById(R.id.rateField);

    mAdminDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Admins");

    getRate();

    mAddDriver.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(AdminActivity.this, AddDriverActivity.class);
            startActivity(intent);
            finish();
            return;
        }
    });

    mEditDriver.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });

    mLogout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(AdminActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
            return;
        }
    });

    mUpdateRate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setRate();
        }
    });
}

private void getRate() {
    mAdminDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                if (map.get("rate")!=null){
                    mRate = map.get("rate").toString();
                    mRateField.setText(mRate);
                }
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}

private void setRate() {
    mRateField.getText().toString();
    mAdminDatabase.child("rate").setValue(mRateField);
}

}

I am sorry, I am still a beginner in Android Studio. 抱歉,我仍然是Android Studio的初学者。 Any help would be appreciated. 任何帮助,将不胜感激。 My firebase: 我的火力地堡:

图片

Take a look in your Firebase rules. 查看您的Firebase规则。 I saw that you asked for "make the restriction public", so you can open your rules and set read and write true. 我看到您要求“公开限制”,因此您可以打开规则并设置读写为true。

Like this: 像这样:

{
    "rules": {
    ".read": true,
    ".write": true
    }
}

Check the rules in the FirebaseDatabase . 检查FirebaseDatabase的规则。 If you set them to true , there is no need to auth. 如果将它们设置为true ,则无需进行身份验证。 Btw, this is a not recommended option, you should always have some security in this aspect. 顺便说一句,这是不推荐的选项,在这方面您应该始终具有一些安全性。

Hope it helps. 希望能帮助到你。

Try this : 尝试这个 :

mAdminDatabase = FirebaseDatabase.getInstance().getReference("Users").child("Admins");

Should it works :D 它应该工作:D

If it doesn't work try this : 如果不起作用,请尝试以下操作:

  mUser = FirebaseDatabase.getInstance().getReference("Users");

and after that, you can set the value of the admins 然后,您可以设置管理员的值

  mUser.child("Admins").child("rate").setValue("aString");

It's working try this: 正在尝试尝试:

private Button mLogout, mAddDriver, mEditDriver, mUpdateRate;

    private DatabaseReference mAdminDatabase;

    private EditText mRateField;

    private String mRate, mPassword;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mUpdateRate = (Button) findViewById(R.id.save);

        mRateField = (EditText) findViewById(R.id.editText);

        mAdminDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Admins");

        getRate();

        mUpdateRate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setRate();
            }
        });
    }

    private void getRate() {
        mAdminDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
                    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                    if (map.get("rate")!=null){
                        mRate = map.get("rate").toString();
                        mRateField.setText(mRate);
                    }
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }

    private void setRate() {
        mRate =   mRateField.getText().toString();
        mAdminDatabase.child("rate").setValue(mRate);
    }

Hope It's help full. 希望对您有帮助。 在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM