您能帮我确定为什么我的代码不起作用吗?我想在Firebase中检索子rate
的值,并将其显示在Android Studio中的EditText
上。然后,当通过EditText
在button
中输入另一个值时,子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的初学者。任何帮助,将不胜感激。我的火力地堡:
答案 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);
}