你能帮我弄清楚为什么我的代码无效吗?我想在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的初学者。任何帮助,将不胜感激。我的火力基地:
检查FirebaseDatabase
中的规则。如果将它们设置为true
,则无需进行身份验证。顺便说一下,这是一个不推荐的选项,你应该总是在这方面有一些安全性。
希望能帮助到你。
请查看您的Firebase规则。我看到你要求“公开限制”,所以你可以打开你的规则并设置读写真实。
像这样:
{
"rules": {
".read": true,
".write": true
}
}
试试这个 :
mAdminDatabase = FirebaseDatabase.getInstance().getReference("Users").child("Admins");
它应该有效:D
如果它不起作用试试这个:
mUser = FirebaseDatabase.getInstance().getReference("Users");
之后,您可以设置管理员的值
mUser.child("Admins").child("rate").setValue("aString");
它的工作尝试这个:
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);
}