2017-05-14 15 views
0

getTitle()을 호출 할 때 어떤 이유로 인해 항상 null이 반환됩니다. ValueEventListener가 전혀 추가되지 않는 것 같습니다.ValueEventListener.onDataChange()가 호출되지 않습니다

수신기에서 제목의 값을 디버깅하거나 인쇄 할 때 인쇄되지 않습니다 ... onCancelled()가 아니라 ValueEventListener가 호출됩니다.

문제가 무엇인지 아는 사람이 있습니까? 보기에서 ChildEventListener를 직접 사용할 때 제대로 작동하므로 데이터베이스 연결이 아닙니다.

JSON 개체 :

"about" : { 
    "info" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In non suscipit risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in lectus consectetur nisl molestie luctus. Nulla commodo tincidunt dui ut dignissim. Suspendisse sapien lacus, tristique non ultricies nec, accumsan nec ipsum. Integer feugiat faucibus eros. Mauris augue ex, tincidunt a elit nec, pharetra aliquam nisl. Quisque viverra fringilla pulvinar. Nulla et vehicula ipsum, sed ultrices est. Maecenas bibendum ipsum quis erat cursus euismod. Nullam tempor diam eu eros ultrices, vel efficitur lacus bibendum. Cras auctor erat sem, quis auctor libero feugiat sit amet. Fusce semper odio at lacus faucibus, a feugiat massa suscipit. Pellentesque id est id massa faucibus faucibus quis eget libero.", 
    "title" : "Vårt hotell er best i hele verden" 
    }, 

문제 분류 :

public class AboutUsObserver extends AboutUs implements MyObserverInterface { 

    private List<DataChangedListener> listeners = new ArrayList<>(); 
    public AboutUsObserver(Query mRef){ 
     mRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot child : dataSnapshot.getChildren()){ 
        if (child.getKey().equals("title")) { 
         String title = child.getValue(String.class); 
         setTitle(title); 
        } 

        else if (child.getKey().equals("info")) { 
         String info = child.getValue(String.class); 
         setInfo(info); 
        } 
       } 

       for (DataChangedListener listener : listeners) 
        listener.onDataChanged(); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 

    @Override 
    public void addDataChangedListener(MyObserverInterface.DataChangedListener dataChangedListener) { 
     listeners.add(dataChangedListener); 
    } 

    @Override 
    public void removeListenerAt(int index) { 
     listeners.remove(index); 
    } 

    @Override 
    public void removeListeners() { 
     listeners = new ArrayList<>(); 
    } 

} 

AboutUs 클래스하십시오 단편에서

public class AboutUs { 

    public String title; 
    public String info; 

    // Required default constructor for Firebase object mapping 
    @SuppressWarnings("unused") 
    public AboutUs(){} 

    public AboutUs (String title, String info) { 
     this.title = title; 
     this.info = info; 
    } 

    public void setTitle(String title){ 
     this.title = title; 
    } 

    public void setInfo(String info){ 
     this.info = info; 
    } 

    public String getTitle(){ 
     return title; 
    } 

    public String getInfo(){ 
     return info; 
    } 
} 

onCreateView()

DatabaseReference mRef = FirebaseDatabase.getInstance().getReference(); 
     final DatabaseReference aboutRef = mRef.child("about"); 

     final TextView TITLE = (TextView) view.findViewById(R.id.aboutTitle); 
     final TextView INFO = (TextView) view.findViewById(R.id.aboutInfo); 

     final AboutUsObserver aboutUsObserver = new AboutUsObserver(mRef); 

     aboutUsObserver.addDataChangedListener(new MyObserverInterface.DataChangedListener() { 
      @Override 
      public void onDataChanged() { 
       String test = aboutUsObserver.getTitle(); 
       TITLE.setText(aboutUsObserver.getTitle()); 
       INFO.setText(aboutUsObserver.getInfo()); 
      } 
     }); 
,

답변

1

AboutUsObserver은 어린이 변경이 예상됩니다 titleinfo입니다. 위치 about에 대한 변경 사항을 수신 대기해야합니다. 하지만 당신은 루트 위치를 듣고 그것을 초기화됩니다

DatabaseReference mRef = FirebaseDatabase.getInstance().getReference(); 
... 
final AboutUsObserver aboutUsObserver = new AboutUsObserver(mRef); 

변경에 :

final AboutUsObserver aboutUsObserver = new AboutUsObserver(aboutRef); 
+0

와우 .. 내가, 시간 디버깅 것을 놓친 믿을 수 없다. 음, 8 시간 동안 똑바로 프로그래밍 할 때 일어날 수있는 일이라고 생각합니다. 고맙습니다! –