使用firebase数据库中的android app更新位置数据

时间:2017-03-03 20:40:53

标签: android firebase

我正在开发一个简单的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());

1 个答案:

答案 0 :(得分:0)

按照您使用旧API版本的最新docs

  

1 - 确保您配置了正确的Google服务JSON文件   从firebase项目控制台下载的。

     

2 - 默认情况下,对数据库的读写访问权限受到限制   只有经过身份验证的用户才能读取或写入数据开始   如果不设置Authentication,您可以configure your rules进行公开访问。这确实使您的数据库开放   任何人,甚至是不使用你的应用程序的人,所以一定要限制你的   设置身份验证时再次使用数据库。

     

3 - 准确地遵循记录良好的article进行书写和阅读   来自firebase数据库的数据。