【问题标题】:Unable to read objects from firebase database snapshot无法从 firebase 数据库快照中读取对象
【发布时间】:2018-11-02 23:05:57
【问题描述】:

我正在尝试从 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);

我的station class code 和location class code。

从 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));
    }

【问题讨论】:

  • station1 下的第三个键是什么?
  • 尝试删除多余的字段并再次运行。
  • @uneq95 我做了,但没有帮助。
  • quora.com/… 这是我过去所做的。我无法发现您的代码的问题。
  • 添加前初始化站数组列表!

标签: android firebase firebase-realtime-database


【解决方案1】:

初始化电台列表。

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

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

【讨论】:

  • 它有效,但不知何故我没有得到地图上显示的标记。
  • 这与firebase有关吗?
  • 我不知道,但我想你也可以帮助我。查看更新后的帖子。
  • 好的。让我们看看吧。
  • 您必须在“将数据添加到列表后”执行在 onDataChange 方法末尾添加标记的代码
【解决方案2】:

1- 对象 Stations 必须与 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- 初始化数组列表

List<Stations> stations=new Arraylist();

【讨论】:

  • 字段不必公开。如果有公共的 getter 和 setter,它们可以是私有的。
  • 在firebase中,对我来说,不管有公共的getter和setter,它都必须是公共的
  • 是的,我刚刚看到我的代码。我也编写了公共访问说明符。但是如果强制使用公共访问说明符,我在文档中找不到任何地方。
  • 如果你有公共的 getter 和 setter 就可以了。
  • @uneq95 是啊!很奇怪
猜你喜欢
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 2019-03-03
  • 2023-04-10
  • 2017-10-04
  • 2019-05-07
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多