Java 从检索到的firebase json对象中提取单个数据值

Java 从检索到的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

在我的android应用程序中,我只想从firebase json对象的所有节点中检索一个值,然后检查。。。 我的firebase数据库看起来像->

现在我使用这段代码来完成我的任务,但每次作为输出我都会得到null

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%工作。现在好了吗?