firebaserecycleradapter() нельзя применить к FirebaseRecyclerAdapter

Может кто-нибудь, пожалуйста, скажите, что за ошибка в этой конкретной строке.

Вот изображение

Вот сообщение об ошибке показывает.

Сообщение об ошибке

package com.example.souravkumar.sqaurewallpapers;

import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;

/**
 * Created by Sourav Kumar on 11/3/2017.
 */

public class popular extends AppCompatActivity {

    private RecyclerView recyclerView;
    private DatabaseReference myRef;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        myRef = FirebaseDatabase.getInstance().getReference();
        FirebaseRecyclerAdapter<image_details, BlogViewHolder> adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(
                image_details.class,
                R.layout.individual_row,

                myRef) {
            @Override
            protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
                holder.setDate(model.getDate());
                holder.setUrl(model.getUrl());
            }

            @Override
            public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return null;
            }
        };

        recyclerView.setAdapter(adapter);

    }

    public static  class BlogViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        ImageView imageView;
        public BlogViewHolder(View itemView) {
            super(itemView);
            textView = (TextView)itemView.findViewById(R.id.date);
            imageView = (ImageView)itemView.findViewById(R.id.imageView);
        }

        public void setDate(Long date) {
            textView.setText(date.toString());
        }

        public void setUrl(String url) {
            Picasso.with(itemView.getContext())
                    .load(url)
                    .resize(50, 50)
                    .centerCrop()
                    .into(imageView);
        }
    }
}

Ссылка на весь код


person Sourav Singh    schedule 03.11.2017    source источник
comment
Пожалуйста, не показывайте изображения кода (или другого текстового контента). Вместо этого отредактируйте свой вопрос, чтобы показать фактический код, и включите текст сообщения об ошибке, которое вы получите. См. раздел Создание MCVE.   -  person Frank van Puffelen    schedule 03.11.2017
comment
хорошо .. но не могли бы вы помочь мне здесь? нужна помощь   -  person Sourav Singh    schedule 03.11.2017
comment
Какую версию FirebaseUI вы используете и является ли image_details модельным классом? Пожалуйста, поделитесь своим кодом в виде текста и всем сообщением об ошибке, которое вы получите.   -  person Grimthorr    schedule 03.11.2017
comment
firebase Ui: скомпилировать «com.firebaseui: firebase-ui-database: 3.1.0»   -  person Sourav Singh    schedule 03.11.2017
comment
и да image_details это класс модели   -  person Sourav Singh    schedule 03.11.2017
comment
@Grimthorr Я обновил сообщение об ошибке, посмотри на картинку   -  person Sourav Singh    schedule 03.11.2017
comment
@Grimthorr, не могли бы вы заглянуть в мой проект и сказать мне, где я ошибаюсь. Почти неделю я изо всех сил пытался получить данные из базы данных firebase, чтобы показать их на фрагменте активности с вкладками.   -  person Sourav Singh    schedule 03.11.2017


Ответы (5)


В последней версии (3.x) FirebaseUI реализован другой метод инициализации FirebaseRecyclerAdapter, чем в предыдущих версиях. Из с использованием документации FirebaseRecyclerAdapter:

Сначала настройте адаптер, создав FirebaseRecyclerOptions. В этом случае мы продолжим наш пример чата:

 FirebaseRecyclerOptions<Chat> options =
                new FirebaseRecyclerOptions.Builder<Chat>()
                        .setQuery(query, Chat.class)
                        .build();

Затем создайте объект FirebaseRecyclerAdapter. У вас уже должен быть подкласс ViewHolder для отображения каждого элемента.

Итак, для вашего примера вам нужно сделать что-то похожее на:

FirebaseRecyclerOptions<image_details> options =
        new FirebaseRecyclerOptions.Builder<image_details>()
                .setQuery(myRef, image_details.class)
                .build();

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(options) {
    @Override
    public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.individual_row, parent, false);

        return new BlogViewHolder(view);
    }

    @Override
    protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
        // Bind the image_details object to the BlogViewHolder
        // ...
    }
};

Наконец, FirebaseRecyclerAdapter использует прослушиватель событий для отслеживания изменений в запросе Firebase. Чтобы начать прослушивание данных, вызовите adapter.startListening() и adapter.stopListening(), чтобы остановить прослушиватель. Рекомендуется вызывать их в onStart() и onStop() соответственно. Дополнительные сведения об этом доступны в жизненный цикл FirebaseRecyclerAdapter. документация.

person Grimthorr    schedule 03.11.2017

Вы пропустили способ запуска действия. Добавьте это в метод onStart():

firebaseRecyclerAdapter.startListening();
person Ketan Choyal    schedule 09.02.2018

Здравствуйте, ваша ошибка связана с отсутствующим аргументом в этих (), которые находятся рядом с этим

<image_details, BlogViewHolder>

поэтому вы пропустили еще один аргумент вашего класса BlogViewHolder, поэтому я добавлю фрагмент кода и сошлюсь на ваш отсутствующий аргумент с помощью комментария в этом:

FirebaseRecyclerAdapter<image_details, BlogViewHolder> adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(
            image_details.class,
            R.layout.individual_row,
            BlogViewHolder.class //see this is missing so you should add it       
            myRef) {
person Hasan Bou Taam    schedule 03.11.2017

Это правильный путь:

FirebaseRecyclerOptions<image_details> options =
    new FirebaseRecyclerOptions.Builder<image_details>()
            .setQuery(myRef, image_details.class)
            .build();

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(options) {
    @Override
    public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.individual_row, parent, false);

        return new BlogViewHolder(view);
    }

    @Override
    protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
        // Bind the image_details object to the BlogViewHolder
        // ...
    }
};
person Sahil Singh    schedule 02.09.2018

У меня была такая же ошибка, и это сработало очень хорошо для меня. Надеюсь, это поможет кому-то

//loads data into recycler view onstart up
@Override
protected void onStart() {
    super.onStart();

    FirebaseRecyclerOptions<Data> options =
            new FirebaseRecyclerOptions.Builder<Data>()
                    .setQuery(dbReference, Data.class)
                    .build();

    FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Data, DataViewHolder>(options) {
        @Override
        public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row, parent, false);

            return new DataViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull DataViewHolder holder, int position, @NonNull Data model) {
            // Bind the image_details object to the BlogViewHolder
            // ...
            holder.setDetails(getApplicationContext(), model.getName(), model.getDepartment(), model.getDescription());
        }
    };



    firebaseRecyclerAdapter.startListening();
    recyclerView.setAdapter(firebaseRecyclerAdapter);

}
person Team chang    schedule 14.03.2019