私は以下のような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());
}
}
あなたのXMLで「match_parent」にごRecyclerViewのlayout_heightを変更するには、あなたのコードは、あなたが表示するようにしようとしているデータへの読み取りアクセス権を持つ特定のか?デフォルトでは、Firebaseデータベースは認証されたユーザだけが読むことができ、あなたのコードはユーザを認証していないようです。 [データの読み取りに関するFirebaseのドキュメント](https://firebase.google.com/docs/database/android/retrieve-data)の最初の青色のボックスを参照してください。 –
はい、認証されます。元の投稿にコードを追加します。 –
私は今同じ問題に直面しています。あなたは解決策を見つけましたか? –