2016-06-17 6 views
3

У меня есть структура данных firebase, как показано ниже. Я пытаюсь загрузить эти данные с помощью FirebaseRecyclerAdapter. Проблема в том, что populateViewHolder() не вызван. Работает ссылка на структуру базы данных.Android FirebaseRecyclerAdapter populateViewHolder() никогда не называется

Я могу прочитать данные с друзьямиRef.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

Вы уверены, что ваш код имеет доступ на чтение данных, которые вы пытаетесь показать? По умолчанию база данных Firebase доступна только пользователям, прошедшим проверку подлинности, и ваш код, похоже, не аутентифицирует пользователя. См. Первый синий квадрат в документации [Firebase для чтения данных] (https://firebase.google.com/docs/database/android/retrieve-data). –

+1

Да, он аутентифицируется. Добавит код в исходное сообщение. –

+0

Я столкнулся с той же проблемой сейчас. Вы нашли решение? –

ответ

0

Просто измените layout_height вашего RecyclerView к «match_parent» в вашем XML

+0

Не могли бы вы расширить свой ответ. Возможно, это связано с тем, почему это вызывает проблему и как ваши решения исправят ее. Это помогает будущим читателям лучше понять решение. – Newd

+0

Ничего не исправил для меня, и я понятия не имею, почему это было бы. – StackAttack