2016-08-31 3 views
0

У меня есть эта база данных:FirebaseRecyclerAdapter с 2 Чайлдсом

Database: 
    X:{ 
    UserID:{ 
     UNIQUE_ID_GENERATED_BY_PUSH_METHOD:{ 
      x:"hello", 
      y:"hey there!" 
     } 
     UNIQUE_ID_2_GENERATED_BY_PUSH_METHOD:{ 
      x:"what's up?", 
      y:"Nothing Much" 
     } 
    } 
    UserID2:{ 
     UNIQUE_ID_GENERATED_BY_PUSH_METHOD:{ 
      x:"bye", 
      y:"Have a nice day!" 
     } 
     UNIQUE_ID_2_GENERATED_BY_PUSH_METHOD:{ 
      x:"what's up?", 
      y:"Nothing Much" 
     } 
    } 
} 

Однако мой FirebaseRecyclerAdapter пуст с этой базой данных, как я прохожу этот DatabaseReference к моим FirebaseRecyclerAdapter:

DatabaseReference = FirebaseDatabase.getInstance().getReference().child("X"); 
mAdapter = new FirebaseRecyclerAdapter<Campaign, CampaignHolder>(Campaign.class, R.layout.recyclerview_template, CampaignHolder.class, ref) { 
//... 
} 

Он отлично работает, когда я не У каждого сообщения есть userID. Поэтому, если я удалю родителя UserID, мой FirebaseRecyclerAdapter не будет пустым.

Как исправить эту проблему?

+0

Я не совсем понимаю, что вы пытаетесь выполнить. Но если вы посмотрите, как отображать информацию из «связанного объекта» ('x' в образце JSON) в представлении, прочитайте этот ответ: http://stackoverflow.com/questions/34559171/coupling-firebaserecyclerviewadapter- to-a-boolean-string-map-entry –

+0

@FrankvanPuffelen Я не думаю, что это связано; Булевы значения были просто примером. Я отредактирую свой вопрос, чтобы быть более ясным –

+0

С помощью этой ссылки ваш 'populateViewHolder()' будет вызываться для каждого пользователя. Вы используете класс «Кампания», который кажется, что это не то же самое. Вам понадобится класс 'User', который содержит кампании. –

ответ

2

Сглаживание вложенных данных в настоящее время не является функцией FirebaseUI. Если вы считаете, что для этого существует общий спрос, напишите feature request on the Github repo. Я еще не видел этот запрос, поэтому, возможно, вам лучше построить это на своей собственной вилке репо.

2

Проверьте этот запрос на растяжение: https://github.com/firebase/FirebaseUI-Android/pull/276 Я думаю, что это может быть то, что вы ищете: если вы индексируете свои данные, все, что вам нужно сделать, это предоставить ему список ключей для получения x и y. Обратитесь к документации: https://github.com/SUPERCILEX/FirebaseUI-Android/blob/7e2be3aed73735e3d4e1a318cf268a5c9db67475/database/README.md#using-firebaseui-with-indexed-data

Я думаю, что вы должны изменить структуру данных, чтобы быть что-то вроде этого:

message-keys: { 
    uid1: { 
     key1: true 
     key2: true 
    } 
    uid2: { 
     key1: true 
     key2: true 
    } 
} 
messages: { 
    key1: { 
     x: "bye" 
     y: "Have a nice day!" 
    } 
    key2: { 
     x: "what's up?" 
     y: "Nothing Much" 
    } 
} 

Тогда вы можете создать RecyclerView вроде так:

new FirebaseRecyclerAdapter<Chat, ChatHolder>(Chat.class, android.R.layout.two_line_list_item, ChatHolder.class, ref.child("message-keys").child(uid), ref.child("messages")) 

Надеется, что это помогает!