我正在开发一个简单的Android应用程序,我需要像Uber一样创建地图和跟踪位置......我使用firebase作为我的数据库来存储用户的位置。 为了存储位置,我创建了一个在调用MainActivity时调用的服务 我面临的问题是该位置在数据库中只更新一次,即当位置发生变化时,它不会在数据库中更新,因为我必须重新启动应用程序才能更新新位置。
这是我位置服务中的onLocationChanged方法的代码
public void onLocationChanged(Location location) {
Log.d("lam", "onLocationChanged:lam "+location.getLatitude()); //The log gets updated but not the values in database
Map<String,Object> taskMap=new HashMap<>();
taskMap.put("Latitude",location.getLatitude());
taskMap.put("Longitude",location.getLongitude());
try{
urlCurrenUser.updateChildren(taskMap);//urlCurrentUser is the path to database
}catch(Exception e){}
}
我也试过
public void onLocationChanged(Location location) {
Log.d("lam", "onLocationChanged:lam "+location.getLatitude()); //The log gets updated but not the values in database
try {
urlCurrenUser.child("Lattitude").setValue(location.getLattitude());
urlCurrenUser.child("Longitude").setValue(location.getLongitude());
}catch (Exception e){}
我已在主要活动的onCreate()中调用该服务
编辑 我认为我的urlCurrentUser(对数据库的引用)存在问题,当应用程序首次尝试启动时,位置在数据库中更新,但是当位置发生更改并再次调用代码来更新新坐标时,它会给出异常,即
java.lang.NullPointerException:尝试调用虚方法 &#39; com.firebase.client.Firebase com.firebase.client.Firebase.child(java.lang.String中)&#39;在null对象上 参考
我无法理解如何解决这个问题 这是我的数据库结构的快照 enter image description here
数据库参考代码
urlCurrenUser = new Firebase(URL).child("users").child(authData.getUid());
答案 0 :(得分:0)
按照您使用旧API版本的最新docs。
1 - 确保您配置了正确的Google服务JSON文件 从firebase项目控制台下载的。
2 - 默认情况下,对数据库的读写访问权限受到限制 只有经过身份验证的用户才能读取或写入数据开始 如果不设置Authentication,您可以configure your rules进行公开访问。这确实使您的数据库开放 任何人,甚至是不使用你的应用程序的人,所以一定要限制你的 设置身份验证时再次使用数据库。
3 - 准确地遵循记录良好的article进行书写和阅读 来自firebase数据库的数据。