2017-08-07 106 views
0

我正在应用为我的开发团队,我想补充的应用程序版本编辑所有登录与火力实时数据库的用户,我使用的代码访问火力地堡实时数据库值

appIdEndPoint = mDatabase.child("users").child(user.getUid()).child("app").child("id"); 
     appVersionEndPoint = mDatabase.child("users").child(user.getUid()).child("app").child("latest_version"); 
     uid_text.setText("User firebase ID: " + user.getUid()); 

     appIdEndPoint.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       appDetails address = dataSnapshot.getValue(appDetails.class); 
       if (address.getID().equals("")){ 
        appIdEndPoint.setValue(getRandom(1000, 9999)); 
       } 
       appid_text.setText("App ID: " + address.getID()); 
       appid_edittext.setText(address.getID()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.d("AppID", databaseError.getMessage()); 
       Toast.makeText(AppDetailsEditor.this, "Failed to fetch data from database", Toast.LENGTH_LONG); 
       finish(); 
      } 
     }); 

     appVersionEndPoint.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       appDetails address = dataSnapshot.getValue(appDetails.class); 
       if (address.getVersion().equals("")){ 
        appVersionEndPoint.setValue("Waiting for developers input"); 
       } 
       appversion_text.setText("App version: " + address.getVersion()); 
       appversion_edittext.setText(address.getVersion()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.d("AppVersion", databaseError.getMessage()); 
       Toast.makeText(AppDetailsEditor.this, "Failed to fetch data from database", Toast.LENGTH_LONG); 
       finish(); 
      } 
     }); 

我试图用“ String appID = dataSnapshot.getValue()。toString();“但它产生java.lang.NullPointerException错误。请有人编辑我的代码来获取数据库值? 这里是 “appDetails.java” 类:

public class appDetails { 

public String ID = ""; 
public String version = ""; 

public appDetails(){ 

} 

public appDetails(String ID, String version){ 
    this.ID = ID; 
    this.version = version; 
} 

public String getID(){ 
    return ID; 
} 
public String getVersion(){ 
    return version; 
} 

}

编辑:

代码显示上面也产生错误显示java.lang.NullPointerException

+0

添加数据库模式 –

+0

你可以发布结构你的json吗? –

+0

我的databse json包含“null”。我尝试添加一些新的孩子,但是当我点击保存时,Firebase不会保存它 –

回答

0

因为你的数据库目前是空的,ValueListener.onDataChange()将一个空的快照火。你的代码需要检查这一点:

appIdEndPoint.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
    if (dataSnapshot.exists()) { 
     appDetails address = dataSnapshot.getValue(appDetails.class); 
     ... 

你需要在监听,可能不存在数据的任何ValueEventListener这样的检查。

+0

似乎工作,但我现在有另一个问题,我需要检查数据库值“root/users/[uid]/app/id”,如果它是空的,我需要编写随机值正如你可以在我的代码中所见 –

0

如果你的数据不会保存在你的Firbease数据库,那么你需要改变这样的规则:

{ 
    "rules": { 
    ".read": true, 
    ".write": true 
    } 
} 

但暂时将您的规则改为此,请不要这样。

+0

我已经准备好了我的规则,但感谢 –

0

您的代码不是无效的。首先地址可以为空。其次,getID可以为null。反正这是更好的:

if (address.getID() == null || "".equals(address.getID())){ 
    appIdEndPoint.setValue(getRandom(1000, 9999)); 
}