2017-05-05 103 views
1

我正在嘗試檢索火力數據庫中的數據,當你進入到應用程序,並從來不聽OnDataChange調用此方法。如果我將新圖片上傳到Firebase,則會調用OnDataChange並顯示我已引入的最後一個網址。我想檢索所有數據url,但我認爲無論是實時數據庫上的新數據,都始終調用此方法。謝謝你的建議。OnDataChange火力地堡的Android監聽

private void prepareAlbums() { 

    // storageReference = FirebaseStorage.getInstance().getReference().child("Images").child(FirebaseAuth.getInstance().getCurrentUser().toString()); 

    System.out.print("user "+ firebaseAuth.getCurrentUser().getUid()); 
    databaseReference.getRoot().child("user-images") 
     .child(firebaseAuth.getCurrentUser().getUid()) 
     .addValueEventListener(new ValueEventListener() { 
      @Override public void onDataChange(DataSnapshot dataSnapshot) { 
      Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue(); 
      if (td != null) { 
       Iterator iterator = td.entrySet().iterator(); 
       while (iterator.hasNext()) { 
       Map.Entry entry = (Map.Entry) iterator.next(); 
       String url = (String) entry.getValue(); 
       System.out.print("url "+ url); 
       urlArray.add(url); 
       } 
      } 
      } 

      @Override public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    CardImage a; 
    for (String s : urlArray) { 
     a = new CardImage("usuario1", 3, s, "madrid"); 
     albumList.adenter code hered(a); 
    } 

    adapter.notifyDataSetChanged(); 
    } 

這是我的數據庫結構

spear-e5a6a 
    user-images 
    3cAhNM75JdaeojrJ5RSjpBhonu63 // userid 
    -KjN5Jr31u5lPwubAwEF: 
    "https://firebasestorage.googleapis.com/v0/b/spe..." 
    -KjN5Nv0Sk8sC6dqDgrq: 
    "https://firebasestorage.googleapis.com/v0/b/spe..." 

我解決了這個問題這樣

databaseReference.getRoot().child("images") 
       .addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         imageArray.clear(); 
         cardList.clear(); 
         for (DataSnapshot imageSnapshot : dataSnapshot.getChildren()) { 
          Log.d(TAG, "onDataChange: " + imageSnapshot.getKey()); 
          ImageInfo image = imageSnapshot.getValue(ImageInfo.class); 
          imageArray.add(image); 

         } 
         render(imageArray); 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 

       }); 


private void render(ArrayList<ImageInfo> imgInfo) { 
     final ArrayList<UserInfo> userArray = new ArrayList<>(); 


     CardImage card; 
     for (ImageInfo imageInfo : imgInfo) { 
      card = new CardImage(imageInfo.getName(), imageInfo.getRating(), imageInfo.getUrl(), imageInfo.getProvince(), imageInfo.getTimeStamp()); 
      cardList.add(card); 
     } 


     adapter.notifyDataSetChanged(); 

    } 

images 
    1494101684644: //timestamp 
    1494101402668 
    comentary: 
    name: 
    province: 
    rating: 
    timeStamp: 
    url: 
    usermail: 
    voted: 
users 
    //user id YMlB6t3Yp1Rs2mcpc9MstUSVD5z2: 
    email: 
    images 
    1494101402668: timestamp 
    1494101684644: 
    name: 

我真的不知道,如果它的正確方法。

+0

的可能的複製[曾經如何使用Java/Android的讀取從火力地堡數據?](http://stackoverflow.com/questions/17904613/how-to-read-data-from-firebase-once-using-java -Android) – Nobody

回答

0

添加您urlArray的聲明在onDataChange()方法。否則爲空,因爲此方法是異步執行的。

對於其他方法,請訪問此postpost

希望它有幫助。

+0

太感謝你了,我解決了這個問題 –