android firebase firebase-realtime-database firebaseui

android - firebaserecycleradapter() no se puede aplicar a FirebaseRecyclerAdapter



firebase-realtime-database firebaseui (5)

¿Alguien puede decir cuál es el error en esa línea específica?

Aquí está el mensaje de error que se muestra.

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); } } }

Enlace a todo el código


Esta es la manera correcta :

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 // ... } };


Hola, tu error se debe a un argumento que falta en estos () que se encuentran junto a este

<image_details, BlogViewHolder>

entonces te perdiste un argumento más de tu clase BlogViewHolder, así que agregaré el fragmento de código y referiré tu argumento faltante con un comentario en esto:

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) {


La última versión (3.x) de FirebaseUI implementa un método diferente de inicializar un FirebaseRecyclerAdapter que las versiones anteriores. Del uso de la documentación de FirebaseRecyclerAdapter :

Primero, configure el adaptador creando FirebaseRecyclerOptions . En este caso continuaremos con nuestro ejemplo de chat:

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

Luego cree el objeto FirebaseRecyclerAdapter . Ya debería tener una subclase ViewHolder para mostrar cada elemento.

Entonces, para su ejemplo, deberá hacer algo similar a:

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 // ... } };

Finalmente, FirebaseRecyclerAdapter usa un detector de eventos para monitorear los cambios en la consulta de Firebase. Para comenzar a escuchar datos, llame a adapter.startListening() y adapter.stopListening() para detener el escucha. Se recomienda llamar a estos en onStart() y onStop() respectivamente. Más detalles sobre esto están disponibles en la documentación del ciclo de vida de FirebaseRecyclerAdapter .


Te perdiste un método para comenzar la actividad. Agregue esto en el método onStart() :

firebaseRecyclerAdapter.startListening();


Tuve el mismo error y esto funcionó muy bien para mí. Espero que ayude a alguien

//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); }