2017-05-14 5 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<>(); 
    } 

} 

弊社についてクラス:断片で

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時間プログラムするときに起こるかもしれないと思います。ありがとうございました! –