2017-05-05 3 views
1

firebase 데이터베이스에서 데이터를 가져 오려고합니다.이 메소드는 앱을 입력 할 때 호출되며 OnDataChange를 수신하지 않을 때 호출됩니다. 새로운 이미지를 firebase에 업로드하면 OnDataChange가 호출되고 내가 소개 한 마지막 URL이 표시됩니다. 모든 데이터 URL을 검색하고 싶지만이 방법은 항상 실시간 데이터베이스의 새로운 데이터와 관련이 있다고 생각합니다. 조언 해 주셔서 감사합니다.OnDataChange Firebase Android Listener

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(); 
    } 

이것은 내가 정말 경우는 적절한 방법을 모르는이

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: 

같은 문제를 해결 내 데이터베이스 구조

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

입니다.

+0

가능한 [Java/Android를 사용하여 Firebase ONCE에서 데이터를 읽는 방법?] (http://stackoverflow.com/questions/17904613/how-to-read-data-from-firebase-once-using-java) - 안드로이드) – Nobody

답변

0

onDataChange() 방법으로 urlArray 선언을 추가하십시오. 이 메소드가 비동기 적으로 실행되기 (위해) 때문에, null가 null입니다.

다른 접근 방법은 postpost을 방문하십시오.

희망이 있습니다.

+0

고마워, 해결 했어. –