Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase始终在for each循环后返回null_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Firebase始终在for each循环后返回null

Java Firebase始终在for each循环后返回null,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想从Firebase提取数据库。在for each循环中,它向我显示来自数据库的描述,但在for each循环之后,当我再次检查该描述时,它向我显示null,不仅显示description的描述,还显示所有其他值的描述。以下是从Firebase提取数据的代码。它没有显示任何类型的错误。帮帮我 public void getDatafromFirebase(){ reference.addValueEventListener(new ValueEventListener() {

我想从
Firebase
提取数据库。在for each循环中,它向我显示来自
数据库的描述
,但在for each循环之后,当我再次检查该描述时,它向我显示
null
,不仅显示
description
的描述,还显示所有其他值的描述。以下是从
Firebase
提取数据的代码。它没有显示任何类型的错误。帮帮我

public void getDatafromFirebase(){
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                DataSnapshot Videoreference = dataSnapshot.child("Videos");
                for (DataSnapshot videoschild : Videoreference.getChildren()){
                    DataSnapshot description = videoschild.child("Description");
                    DataSnapshot duration = videoschild.child("Duration");
                    DataSnapshot title = videoschild.child("Title");
                    DataSnapshot thumbnail = videoschild.child("Thumbnail");
                    details.setDescription(String.valueOf(description.getValue()));
                    details.setDuration(String.valueOf(duration.getValue()));
                    details.setTitle(String.valueOf(title.getValue()));
                    details.setThumbnail(String.valueOf(thumbnail.getValue()));
                    Log.e("details",details.description);
                    list.add(details);
                }
                Log.e("Size",list.get(0).description);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

如果我理解正确,您正试图在回调之外记录
description
属性(或任何其他属性)的值,您得到的是
null
,对吗

之所以会发生这种情况,是因为Firebase API是异步的,这意味着调用
onDataChange()
方法后会立即返回,并且它返回的任务的回调将在稍后调用。无法保证需要多长时间。因此,在数据可用之前,可能需要几百毫秒到几秒钟的时间。由于该方法立即返回,因此您试图在
onDataChange()
方法之外使用的
description
属性的值尚未从回调中填充

基本上,您尝试从异步API同步返回一个值。那不是个好主意。您应该按照预期异步处理API


这个问题的一个快速解决方法是仅在
onDataChange()
方法中使用
description
值,否则我建议您从中查看anwser的最后一部分,其中我已经解释了如何使用自定义回调来完成。您还可以查看此以更好地理解。

详细信息在哪里声明?另外,
列表
在哪里声明?看起来您的问题可能是在每个循环迭代中使用相同的
详细信息
对象,因此数据被覆盖。如果不知道它们是在哪里声明的,很难说。它们是在类之前声明的。你可以发布完整的代码,包括它们声明的位置吗?但看起来确实是这样。我认为您可能也有异步问题。数据更改时的回调是异步的。因此,如果您正在调用
getDatefromFirebase()
,那么在下一行检查列表时,由于异步回调尚未运行,因此该列表将在该点为空。我查看了您的代码,但我想知道,当我的适配器在onDataChange()方法中发出通知时,它也会返回空值。。。。。为什么???<代码> null <代码>。由于同样的原因。你也可以等待其他的答案,但是如果你认为我的答案对你有帮助,请考虑点击点击箭头左侧的复选标记来接受它。应该把颜色改成绿色。我会很感激的。谢谢