2

我有客户数据以我的firebase数据库中的以下格式存储。在关键火力点获取关键字

{ 
    "fEYfwd8p9oSGAF6iUtXDLkMBCqc2" : { //user id 
    "-KdLAGG-8VOMd62Noyc8" : { //customer id 
     "customerCode" : "shi", 
     "customerLimit" : "2569", 
     "customerName" : "Shishir" 
    }, 
    "-KdOraGISFJ6epjWucfh" : { //customer id 
     //other cust details 
    } 
    }, 
    "jxW41BgSNWdRPyWtUkZA2G0eLhf2" : { //user id 
    "-KdCgJKh6_Rb8MOi-fIj" : { 
     "customerCode" : "Kau", 
     "customerLimit" : "800", 
     "customerName" : "Kaushik" 
    }, 
    "-KdCgacTYBkThnVWe4sb" : { 
     //other cust details 
    }, 
    "-KdCggxld52mq0DsGRjH" : { 
     //other cust details 
    }, 
    "-KdChbdoV7nxwZoGLWsY" : { 
     //other cust details 
    } 
    } 
} 

在我的Android应用程序正在试图检查为客户创造其他细节之前,是否存在客户代码和下面是如何我做这件事。

DatabaseReference dbRef=FirebaseDatabase.getInstance().getReference("customers") 
         .child(FirebaseAuth.getInstance().getCurrentUser().getUid()); 
dbRef.orderByChild("customerCode").equalTo(code).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      if (!snapshot.exists()) { 
       editTextAC.setText(""); 
       editTextAC.setError("Customer code not found in database."); 
      } else { 
       //need to get customer id here. 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError dbError) { 
      Toast.makeText(activity, dbError.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
}); 

我以下面的格式获取快照中的数据。

{ 
    key = jxW41BgSNWasdsaRPsdyaWtUkZA2G0eLhf2, 
    value = {-KdChbdoV7nfdasxwZoGLWsY = { 
       customerCode = Ses, 
       customerLimit = 78888, 
       customerName = Sheshu 
      } 
    } 
} 

我需要从value以上获得客户ID。我试着做snapshot.getKey(),它检索第一级key,即jxW41BgSNWasdsaRPsdyaWtUkZA2G0eLhf2,当我说snapshot.getValue()将检索value作为字符串。我将如何从上面获取客户ID?

+0

尝试'为(字符串客户ID:snapshot.getValue()){// 打印客户ID }'。我可以用iOS来做,但我不确定它是否适用于android –

回答

2
for (DataSnapshot child : snapshot.getChildren()) { 
    Log.i("TAG", "child key = " + child.getKey()); 
} 
+0

有一点疑问。我确信每次都会得到单个数据,因为customerCode在这里是唯一的。所以,我需要在这里使用'for'循环? –

+0

在你的数据中,我看到'user id'里面有很多'customer id',所以你需要一个for循环。 –

+0

不。如果你看到那个代码,那么我将根据登录的用户ID获取客户代码。因此,对于每个用户ID,客户代码是唯一的..所以我很确定只会有一个数据提取.. –

1
DatabaseReference dbRef=FirebaseDatabase.getInstance().getReference("customers") 
        .child(FirebaseAuth.getInstance().getCurrentUser().getUid());dbRef.orderByChild("customerCode").equalTo(code).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     if (!snapshot.exists()) { 
      editTextAC.setText(""); 
      editTextAC.setError("Customer code not found in database."); 
     } else { 
      for (DataSnapshot child : snapshot.getChildren()) { 
       Log.e("Customer_id",child.getKey());} 
     } 
    } 
    @Override 
    public void onCancelled(DatabaseError dbError) { 
     Toast.makeText(activity, dbError.getMessage(), Toast.LENGTH_SHORT).show(); 
    }}); 
+0

它看起来像我的回答是吗? –

+0

是的,它是! :) – Piyush