有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Firebase不会触发数据更改事件

我在Android应用程序中使用Firebase。我正在尝试使用Firebase作为NOSQL数据库,这是我的数据检索对象

public class FirebaseManager {

    private static final String DB_REF = "mainframeradio";
    private static final String STREAM_REF = "streams";

    public static List<MediaStream> getMediaStreams(Context context) {
        final List<MediaStream> mediaStreams = new ArrayList<>();
        FirebaseDatabase db = FirebaseDatabase.getInstance();
        DatabaseReference dbRef = db.getReference(STREAM_REF);

        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Map<String, Object> streams = (Map<String, Object>) dataSnapshot.getValue();

                if (!streams.isEmpty()) {
                    for (Object stream : streams.values()) {
                        String protocol = (String) ((Map) stream).get("protocol");
                        String host = (String) ((Map) stream).get("host");
                        int port = (int) ((Map) stream).get("port");
                        String media = (String) ((Map) stream).get("media");
                        String metadata = (String) ((Map) stream).get("metadata");
                        String streamName = (String) ((Map) stream).get("streamName");

                        MediaStream mediaStream = new MediaStream(protocol, host, port, media, metadata, streamName);
                        mediaStreams.add(mediaStream);
                    }
                } else {
                    L.d("No media streams found on the server.");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                L.w("Couldn't read the stream info from Firebase.");
            }
        });

        return mediaStreams;
    }
}

问题是事件不会从我调用它的活动中触发

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);

    // Set components.
    this.playerView = findViewById(R.id.playerView);
    this.songTitleTextView = findViewById(R.id.songTitleTextView);
    this.albumArt = findViewById(R.id.albumArt);

    // Hide both the navigation and status bar (immersive).
    ViewManager.setFullscreenImmersive(getWindow());

    List<MediaStream> mediaStreams = FirebaseManager.getMediaStreams(this);
    System.out.print(mediaStreams);
}

我只想从firebase检索数据。这是数据库

enter image description here

任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    尝试以下操作以检索数据:

     DatabaseReference reference = FirebaseDatabase.getInstance().getReference("streams");
    
    reference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
    for(DataSnapshot datas: dataSnapshot.getChildren()){
       String hosts=datas.child("host").getValue().toString();
       String medias=datas.child("media").getValue().toString();
       String metadata=datas.child("metadata").getValue().toString();
       String ports=datas.child("port").getValue().toString();
       String protocol=datas.child("protocol").getValue().toString();
       String steamname=datas.child("streamName").getValue().toString();
    
    
     }
    @Override
     public void onCancelled(DatabaseError databaseError) {
      }
     });
    

    datasnapshot是streams,然后您将能够在子0内迭代并获取数据