Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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读取纬度和经度,并在这些位置上做标记。但似乎有一些错误崩溃的应用程序,我无法找到甚至在Logcat。尝试在每条语句后放置一些检查日志,发现问题发生在我试图从数据库快照将值放入类对象的地方。我正在尝试使用循环从快照中获取所有对象。这是我的数据库的结构。 我试图将值从数据库快照放入类对象的映射活动代码 //reading stations from database List<Stations> stations; mDatabase = FirebaseDa

我试图从Firebase读取纬度和经度,并在这些位置上做标记。但似乎有一些错误崩溃的应用程序,我无法找到甚至在Logcat。尝试在每条语句后放置一些检查日志,发现问题发生在我试图从数据库快照将值放入类对象的地方。我正在尝试使用循环从快照中获取所有对象。这是我的数据库的结构。

我试图将值从数据库快照放入类对象的映射活动代码

//reading stations from database
List<Stations> stations;
 mDatabase = FirebaseDatabase.getInstance().getReference().child("STATIONS");

    ValueEventListener stationListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //found out that error is here
            for(DataSnapshot stationsSnapshot: dataSnapshot.getChildren()){
                stations.add(stationsSnapshot.getValue(Station.class));
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i("Station Read[ERROR]",databaseError.getMessage());
        }
    };
    mDatabase.addListenerForSingleValueEvent(stationListener);
//从数据库读取站点
列出电台名单;
mDatabase=FirebaseDatabase.getInstance().getReference().child(“站点”);
ValueEventListener stationListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//发现错误在这里
对于(DataSnapshot站快照:DataSnapshot.getChildren()){
add(stationsnapshot.getValue(Station.class));
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.i(“Station Read[ERROR]”,databaseError.getMessage());
}
};
mDatabase.addListenerForSingleValueEvent(stationListener);
我的和

在从firebase获取的地图上标记位置的代码

    //Placing all station data on Maps
    for(int i=0 ; i<stations.size() ; i++){
        LatLng location = new LatLng(stations.get(i).getLocation().getLatitude(),
                stations.get(i).getLocation().getLongitude());
        mMap.addMarker(new MarkerOptions().position(location).title(stations.get(i).getName()));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
    }
//将所有站点数据放置在地图上

对于(inti=0;i1-对象
必须与firebase中的对象相似。就像这样

public class Stations{

public Location location;
public String name

//..getter and setter

public static class Location{
public double latitude;
public double  longitude;

//..getter and setter

}
}
这些字段必须是公共的

2-初始化arraylist

List<Stations> stations=new Arraylist();
List stations=new Arraylist();

1-对象
必须与firebase中的对象相似。就像这样

public class Stations{

public Location location;
public String name

//..getter and setter

public static class Location{
public double latitude;
public double  longitude;

//..getter and setter

}
}
这些字段必须是公共的

2-初始化arraylist

List<Stations> stations=new Arraylist();
List stations=new Arraylist();

初始化电台列表

List<Stations> stations= new ArrayList<>();
List stations=new ArrayList();

对我来说,添加标记的逻辑似乎是正确的。正如Momen所说,只需在正确的位置添加标记就可以了。

初始化电台列表

List<Stations> stations= new ArrayList<>();
List stations=new ArrayList();


添加标记的逻辑对我来说似乎没有问题。正如Momen所说,只需将其添加到正确的位置就可以了。

station1下的第三个键是什么?请尝试删除该额外字段并再次运行。@uneq95我这样做了,但没有帮助。这是我过去所做的。我无法用代码发现问题。请初始化stations数组列表添加之前!station1下的第三个键是什么?请尝试删除该额外字段并再次运行。@uneq95我这样做了,但没有帮助。这是我过去所做的。我无法发现代码的问题。在添加之前初始化stations数组列表!字段不必是公共的。如果有公共getter和setter用于em.在firebase中,对我来说,它必须是公共的,不管有公共getter和setteryah,我只是看到了我的代码。我也编写了公共访问说明符。但是如果强制使用公共访问说明符,我在文档中找不到任何地方。如果你有公共getter和setter,它工作得很好。@uneq95耶!这很奇怪,字段不需要公开。如果有公共getter和setter,它们可以是私有的。在firebase中,对我来说,无论有公共getter和setter,它都必须是公共的。是的,我刚刚看到了我的代码。我也编写了公共访问说明符。但是如果必须使用公共访问说明符,我在文档中找不到任何地方getters和setters它工作得很好。@uneq95耶!它工作得很奇怪,但不知何故我没有得到地图上显示的标记。这与firebase有关吗?我不知道,但我想你也可以帮我。请参阅更新的帖子。好的。让我们看看。你必须执行在onDataChange方法末尾添加标记的代码“将数据添加到列表后”成功,但不知何故,我没有得到地图上显示的标记。这与firebase有关吗?我不知道,但我想你也可以帮助我。请参阅更新的帖子。好的。让我们看看。将数据添加到列表后,你必须执行在onDataChange方法末尾添加标记的代码”