2016-07-02 10 views
1

私はFirebaseを使用してデータベースにユーザコントロールのテキストを保存します。私は通常、onDataChangeが最初に起動されなかったので、nullpointer例外を取得します。 (私はValueEventListenerを使用しています)Firebase - view.setText() - レスポンスを待つ方法

この問題をどうやって解決できますか?

ここコール:

sharedPref = FirebaseDatabase.getInstance().getReference().child("abc").child("ddd"); 

      ValueEventListener clubSettingsListener = new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        firebaseClubSettingsModel = dataSnapshot.getValue(FirebaseClubSettingsModel.class); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        Log.w("ClubSettingsService", "loadPost:onCancelled", databaseError.toException()); 
       } 
      }; 

      sharedPref.addValueEventListener(clubSettingsListener); 

      if (firebaseClubSettingsModel == null) { 
       firebaseClubSettingsModel = new FirebaseClubSettingsModel(); 
       //sharedPref.setValue(firebaseClubSettingsModel); 
      } 
+0

私はあなたの問題が何であるかを明確に把握してください。 – adolfosrs

+0

投稿を編集しました。 – thomas

答えて

2

firebaseからデータを取得することは非同期プロセスであるので、あなたがチェックしたときに通話が終了されるという保証はありませんので、あなたはOnDataChangeのイベントの外で、あなたのデータを操作することはできませんその値。

onDataChangeリスナー内で検証とその他のロジックを実行する必要があります。データが利用可能になるとすぐにトリガーされるからです。

sharedPref = FirebaseDatabase.getInstance().getReference().child("abc").child("ddd"); 

ValueEventListener clubSettingsListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     firebaseClubSettingsModel = dataSnapshot.getValue(FirebaseClubSettingsModel.class); 
     if (firebaseClubSettingsModel == null) { 
      firebaseClubSettingsModel = new FirebaseClubSettingsModel(); 
      sharedPref.setValue(firebaseClubSettingsModel); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.w("ClubSettingsService", "loadPost:onCancelled", databaseError.toException()); 
    } 
}; 
sharedPref.addValueEventListener(clubSettingsListener); 
+0

データが利用可能になるまで待つことはできますか?たぶん、スプラッシュスクリーンがありますか? – thomas

+0

データによってはどういう意味ですか? 'onDataChange'がトリガーされ、データが利用可能であれば、 – adolfosrs

+1

簡単なユースケース:私はボタンを持っています。ボタンテキストはfirebaseデータベースにあります。ビューをユーザーに表示すると、ボタンテキストは表示されません。既定のテキストを表示することは可能です(既定のテキストを持つモデルがあります)が、これは良い解決策ではありません。 – thomas

関連する問題