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

时间:2018-10-30 12:32:20

标签: java android firebase

您能帮我确定为什么我的代码不起作用吗?我想在Firebase中检索子rate的值,并将其显示在Android Studio中的EditText上。然后,当通过EditTextbutton中输入另一个值时,子rate的值将被更新。谢谢。

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);
}

}

很抱歉,我仍然是Android Studio的初学者。任何帮助,将不胜感激。我的火力地堡:

image

4 个答案:

答案 0 :(得分:0)

看看您的Firebase规则。我看到您要求“公开限制”,因此您可以打开规则并设置读写为true。

赞:

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

答案 1 :(得分:0)

检查FirebaseDatabase中的规则。如果将它们设置为true,则无需进行身份验证。顺便说一句,这是不推荐的选项,在这方面您应该始终具有一些安全性。

希望有帮助。

答案 2 :(得分:0)

尝试一下:

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

是否可以使用:D

如果它不起作用,请尝试以下方法:

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

然后,您可以设置管理员的值

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

答案 3 :(得分:-1)

正在尝试以下方法:

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);
    }

希望全力帮助。 enter image description here