Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从简单的FireBase数据库读取_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 从简单的FireBase数据库读取

Android 从简单的FireBase数据库读取,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我在读取Firebase数据库时遇到一些问题 我有一个非常简单的布局 { "lot" : { "lot1" : "low", "lot2" : "low", "lot3" : "low" } } 当然,MyAppName{}是最重要的 FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getInstance(

我在读取Firebase数据库时遇到一些问题

我有一个非常简单的布局

{
  "lot" : {
    "lot1" : "low",
    "lot2" : "low",
    "lot3" : "low"
  }
}
当然,MyAppName{}是最重要的

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getInstance().getReference();

   // Read from the database
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

            lotMap = (HashMap) dataSnapshot.getValue();
            Log.d("[Directions Activity]: ", "Lot1 value ======    " +lotMap.get("lot"));
            Iterator it = lotMap.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pair = (Map.Entry)it.next();
                Log.d("[Directions Activity]: ", "iterator " + pair.getKey() + " = " + pair.getValue());
                System.out.println();
                it.remove(); // avoids a ConcurrentModificationException
            }

        }
下面是从日志中返回的内容

 D/[Directions Activity]:: Lot1 value ======    null //null obviously
                                                //because key lot1 doesn't exist
 D/[Directions Activity]:: lot = {lot3=low, lot2=low, lot1=low}
所以对我来说,它看起来像是返回字符串{lot3=low,lot2=low,lot1=low},但是我希望能够得到一个数组,如果可能的话,每个数组都有一个值


这是可以实现的吗

您的代码中有一些调整。你的

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getInstance().getReference();
应该这样写,

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference database = myRef.child("anyValueNameYouSpecifyInConsole");
这两行应该在onCreate方法之外声明。需要使用addValueEventListener指定的是第二个数据库引用,而不是第一个。从我的例子来看应该是这样的

database.addValueEventListener (new ValueEventListener) 
它将导入方法

如果您希望数据显示在特定的TextView中,那么只需找到要使用的TextView并将其包含在onDataChange方法中,如下所示

String x = dataSnapshot.getValue(String.class);
textViewNameDeclared.setText(x);

不要忘记更改读取的安全规则。

您可以使用typecast来
JSONObject
并解析JSONObject

    JSONObject jsonObject= new JSONObject((Map)dataSnapshot.getValue());

    JSONObject jsonObj= (JSONObject) jsonObject.get("lot");

         for (Object key : jsonObj.keySet()) {
        //based on you key types
        String keyStr = (String)key;
        Object keyvalue = jsonObj.get(keyStr);

        //Print key and value
        System.out.println("key: "+ keyStr + " value: " + keyvalue);
}

如果您使用java 8,那么您就使用lamada表达式。

我有同样的问题,这就是我使用的。修改以适应此处的问题

private List<String> lotList;

lotList = new ArrayList<>();

DatabaseReference reference= database.getInstance().getReference().child("lot");
私有列表lotList;
lotList=newarraylist();
DatabaseReference=database.getInstance().getReference().child(“lot”);
现在添加值事件侦听器

reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Iterable<DataSnapshot> mData = dataSnapshot.getChildren();

            for(DataSnapshot d : mData){

                String lot_string = d.getValue(String.class);
                lotList.add(lot_string);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
reference.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Iterable mData=dataSnapshot.getChildren();
对于(数据快照d:mData){
字符串lot\u String=d.getValue(String.class);
lotList.add(lot\U字符串);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});

谢谢!我要试一试!