Java 从检索到的firebase json对象中提取单个数据值
在我的android应用程序中,我只想从firebase json对象的所有节点中检索一个值,然后检查。。。 我的firebase数据库看起来像-> 现在我使用这段代码来完成我的任务,但每次作为输出我都会得到nullJava 从检索到的firebase json对象中提取单个数据值,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,在我的android应用程序中,我只想从firebase json对象的所有节点中检索一个值,然后检查。。。 我的firebase数据库看起来像-> 现在我使用这段代码来完成我的任务,但每次作为输出我都会得到null public class optChos extends AppCompatActivity { DatabaseReference ref; @Override protected void onCreate(Bundle savedInstanceState) { s
public class optChos extends AppCompatActivity {
DatabaseReference ref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opt_chos);
final FirebaseDatabase database = FirebaseDatabase.getInstance();
ref = database.getReference("vendorDtl");
}
public void fetchkey(View view) {
EditText etx=findViewById(R.id.etkey);
String keysrch=etx.getText().toString();
Log.i("optionchoose","fetchkeycalled");
Toast.makeText(getApplicationContext(),"Key finfing",Toast.LENGTH_SHORT).show();
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot vst:dataSnapshot.getChildren()) {
vendor vn = vst.getValue(vendor.class);
Toast.makeText(getApplicationContext(), "Email is-> " + vn.getNam(), Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "key is-> " + vn.getVky(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getApplicationContext(),"nothing fetched",Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot vst:dataSnapshot.getChildren()) {
vendor vn = vst.getValue(vendor.class);
Toast.makeText(getApplicationContext(), "Email is-> " + vn.getNam(), Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "key is-> " + vn.getVky(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getApplicationContext(),"nothing fetched",Toast.LENGTH_SHORT).show();
}
});
}
}
这里的fetchkey(视图)
是按钮的onclick功能
我想从每个节点检索vid
,并与用户进行检查
输入的值..我怎么做
要从每个节点获取
vid
字段的值,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference vendorDtlRef = rootRef.child("vendorDtl");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String vid = ds.child("vid").getValue(String.class);
Log.d("TAG", vid);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
vendorDtlRef.addListenerForSingleValueEvent(eventListener);
要从每个节点获取
vid
字段的值,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference vendorDtlRef = rootRef.child("vendorDtl");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String vid = ds.child("vid").getValue(String.class);
Log.d("TAG", vid);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
vendorDtlRef.addListenerForSingleValueEvent(eventListener);
要从每个节点检索
vid
,请执行以下操作:
DatabaseReference data = FirebaseDatabase.getInstance().getReference().child("vendorDTl");
data.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
String vid=data.child("vid").getValue().toString();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这将转到datasnapshot位置
vendordl
,然后使用该for
循环,它将在该节点的子节点内迭代,以获取值vid
从每个节点检索vid
,执行以下操作:
DatabaseReference data = FirebaseDatabase.getInstance().getReference().child("vendorDTl");
data.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
String vid=data.child("vid").getValue().toString();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这将转到datasnapshot位置
vendorDTl
,然后使用该for
循环,它将在该节点的子节点内迭代,以获取值vid
其显示com.google.firebase.database.DatabaseException:未能将java.lang.Long类型的值转换为logcat中的字符串
错误@Alex Mamow您的字段类型是字符串还是长?我在你的截图中看到,对于同一个字段,你有不同的值。两个值必须相同。如果该值应该是长的,则将该代码行替换为:Long vid=ds.child(“vid”).getValue(Long.class)代码>现在可以工作了吗?好的。。谢谢,如果我混合使用字符和数字..那么字符串就行了?对吗?不,你必须有相同类型的数据。在屏幕截图中,第一个视频是字符串(fzgnzj
),第二个是长视频(32525
)。两者必须相同。制作两个字符串,在我的答案中使用代码,它将100%工作。现在一切正常?它显示com.google.firebase.database.DatabaseException:未能将java.lang.Long类型的值转换为字符串
logcat@Alex Mamow中的错误您的字段类型是字符串还是长?我在你的截图中看到,对于同一个字段,你有不同的值。两个值必须相同。如果该值应该是长的,则将该代码行替换为:Long vid=ds.child(“vid”).getValue(Long.class)代码>现在可以工作了吗?好的。。谢谢,如果我混合使用字符和数字..那么字符串就行了?对吗?不,你必须有相同类型的数据。在屏幕截图中,第一个视频是字符串(fzgnzj
),第二个是长视频(32525
)。两者必须相同。制作两个字符串,在我的答案中使用代码,它将100%工作。现在好了吗?