2016-06-17 9 views
3

私は以下のようなfirebaseデータ構造を持っています。このデータをFirebaseRecyclerAdapterでロードしようとしています。問題は、populateViewHolder()が呼び出されないということです。データベース構造への参照が機能します。Android FirebaseRecyclerAdapter populateViewHolder()は呼び出されません

friendsRef.addValueEventListenerを使用してデータを読み取ることができます。 。私はFirebaseRecyclerAdapterを避けるのが好き(以下コード)は

データ構造は次のとおりです。メインの活動で

-users 
    |-<uid> 
    |-friends 
     |-<uid>:name1 
     |-<uid>:name2 

認証コール

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 

     AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d(getString(R.string.logtag), "signInWithCredential:onComplete:" + task.isSuccessful()); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
//       Log.w(TAG, "signInWithCredential", task.getException()); 
          Toast.makeText(HomeActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } 
         // ... 
        } 
       }); 
    } 

断片コード:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    setHasOptionsMenu(true); 
    View view = inflater.inflate(R.layout.friends_fragment, container, false); 
    RecyclerView friendRecyclerView = (RecyclerView) view.findViewById(R.id.friends_recycler_view); 

    friendRecyclerView.setHasFixedSize(true); 
    friendRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity)); 

    DatabaseReference friendsRef = mActivity.getRootRef().child("users").child(mActivity.getAuth().getCurrentUser().getUid()).child("friends"); 

    FirebaseRecyclerAdapter<String, ViewHolder> recyclerViewAdapter = new FirebaseRecyclerAdapter<String, ViewHolder>(String.class, R.layout.friends_list_item, ViewHolder.class, friendsRef) { 
     @Override 
     protected void populateViewHolder(ViewHolder viewHolder, String model, int position) { 
      viewHolder.friendName.setText(model); 
     } 
    } ; 

    friendRecyclerView.setAdapter(recyclerViewAdapter); 

    return view; 
} 

@Override 
protected int getContentView() { 
    return R.layout.friends_fragment; 
} 

public static class ViewHolder extends RecyclerView.ViewHolder{ 
    private TextView friendName; 
    public ViewHolder(View itemView) { 
     super(itemView); 
     friendName=(TextView) itemView.findViewById(R.id.friends_name_list_item); 
    } 


} 

friendsRef.addValueEventListener:

DatabaseReference friendsRef = mActivity.getRootRef().child("users").child(mActivity.getAuth().getCurrentUser().getUid()).child("friends"); 

     friendsRef.addValueEventListener(new ValueEventListener() { 
              @Override 
              public void onDataChange(DataSnapshot dataSnapshot) { 

               for (DataSnapshot data : dataSnapshot.getChildren()) { 

                Log.d("tag", data.toString()); 
               } 


              } 
+0

あなたのXMLで「match_parent」にごRecyclerViewのlayout_heightを変更するには、あなたのコードは、あなたが表示するようにしようとしているデータへの読み取りアクセス権を持つ特定のか?デフォルトでは、Firebaseデータベースは認証されたユーザだけが読むことができ、あなたのコードはユーザを認証していないようです。 [データの読み取りに関するFirebaseのドキュメント](https://firebase.google.com/docs/database/android/retrieve-data)の最初の青色のボックスを参照してください。 –

+1

はい、認証されます。元の投稿にコードを追加します。 –

+0

私は今同じ問題に直面しています。あなたは解決策を見つけましたか? –

答えて

0

だけ

+0

答えを広げてください。おそらく、それが原因で問題が発生していて、解決策によって問題が解決される場合もあります。これは、今後の読者がソリューションをよりよく理解するのに役立ちます。 – Newd

+0

私のために何も修正しなかったので、なぜそれが起こるのか分かりません。 – StackAttack

関連する問題