所以我目前正在开发一个从Firebase获取数据的API,根据该数据,按钮会改变颜色。但是,当我尝试为我的按钮创建一个新结构时。它不会让我做一个。
我在这里尝试了答案:How to insert data of two tables in Firebase?并且在这里:How can I create an empty table from android app in Firebase?但是对我来说都没有。
这是我的示例代码:
public class Normal extends AppCompatActivity {
Button suite, normal, room1;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;
private DatabaseReference mFirebaseDatabase1;
private FirebaseDatabase mFirebaseInstance;
//FIREBASE AUTH FIELDS
DatabaseReference mSearchedLocationReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal);
mFirebaseInstance = FirebaseDatabase.getInstance();
//FIREBASE
mFirebaseDatabase1 = mFirebaseInstance.getReference("Rooms");
mSearchedLocationReference = mFirebaseDatabase1.child("Room1").child("RoomStatus");
//ASSIGN ID's
room1 = (Button) findViewById(R.id.room2);
room1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mFirebaseDatabase1.child("Rooms").child("Room1").child("RoomStatus").setValue("Green");
startActivity(new Intent(Normal.this, room2.class));
}
});
mSearchedLocationReference.addValueEventListener(new ValueEventListener() { //attach listener
@Override
public void onDataChange(DataSnapshot dataSnapshot) { //something changed!
for (DataSnapshot locationSnapshot : dataSnapshot.getChildren()) {
String location = locationSnapshot.getValue().toString();
Log.d("Locations updated", "location: " + location); //log
if ( location.equals("Green")){
room1.setBackgroundColor(Color.GREEN);
}else if ( location.equals("Red")){
room1.setBackgroundColor(Color.RED);
}
else{
room1.setBackgroundColor(Color.YELLOW);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) { //update UI here if error occurred.
}
});
}
}
PS:我在另一个类上创建了用户结构(用于我的登录)。
答案 0 :(得分:1)
我认为错误的是数组正在返回,其最后一项是绿色
for (DataSnapshot locationSnapshot : dataSnapshot.getChildren())
不允许你改变按钮的颜色。
如果您展示数据库模型,我们将能够为您提供帮助。
答案 1 :(得分:1)
我认为问题是当您点击(房间1)时更改值。您已经将此引用声明为:
mFirebaseDatabase1 = mFirebaseInstance.getReference("Rooms");
当您点击按钮(房间1)时,您触发了此引用以更改值:
mFirebaseDatabase1.child("Rooms").child("Room1").child("RoomStatus").setValue("Green");
换句话说
您说要访问
房间/房间/ ROOM1 / RoomStatus /绿色
但你应该寻找这个
房间/ ROOM1 / RoomStatus /绿色
你有一个名为Rooms的额外孩子,这个孩子会被重复并导致问题
可能的解决方案
在房间1的点击监听器中执行此操作
room1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mFirebaseDatabase1.child("Room1").child("RoomStatus").setValue("Green");
startActivity(new Intent(Normal.this, room2.class));
}
});
我刚刚删除了额外的(.child(" Rooms"))。
答案 2 :(得分:1)