Firebase - 如何制作新的桌子/结构?

时间:2017-11-16 15:09:31

标签: android firebase firebase-realtime-database

所以我目前正在开发一个从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:我在另一个类上创建了用户结构(用于我的登录)。

model

3 个答案:

答案 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)

我认为您应该在firebase上创建一个新结构,您可以通过单击数据库名称旁边的“+”来实现,这是一个示例:

enter image description here

实施您的方法,它应该工作。然后再次连接您的firebase数据库。