使用 RecyclerView 显示来自 Firebase 的数据时出错


(Blog.class,R.layout.venue_row,BlogViewHolder.class,mDatabase) {

onStart (( 中的这一行显示错误。 在这里,我发布了错误消息的屏幕截图。请检查一次。

错误出现在活动.java文件 onStart(( {...}(blog.class,R.layout.venue_row,BlogViewHolder.class,mDatabase( {

活动.java

package com.cornicore.icccricketworldcup2019;
import android.content.Context;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;
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;
public class VenuesActivity extends AppCompatActivity {
private RecyclerView mBlogList;
private DatabaseReference mDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_venues);

mDatabase = FirebaseDatabase.getInstance().getReference().child("Venues");
mDatabase.keepSynced(true);
mBlogList = (RecyclerView) findViewById(R.id.myrecyclerview);
mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(new LinearLayoutManager(this));

}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Blog,BlogViewHolder,>firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>
(Blog.class,R.layout.venue_row,BlogViewHolder.class,mDatabase) {
@Override
protected void onBindViewHolder(@NonNull BlogViewHolder holder, int position, @NonNull Blog model) {
}
@NonNull
@Override
public BlogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
};
mBlogList.setAdapter(firebaseRecyclerAdapter);
}
public static class BlogViewHolder extends RecyclerView.ViewHolder{
View mView;
public BlogViewHolder(View itemView){
super(itemView);
mView = itemView;
}
public void setTitle(String title){
TextView post_title = (TextView) mView.findViewById(R.id.post_title);
post_title.setText(title);
}
public void setDesc(String desc){
TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
post_desc.setText(desc);
}
public void setImage(Context ctx, String image){
ImageView post_Image = (ImageView) mView.findViewById(R.id.post_image);
Picasso.with(ctx).load(image).into(post_Image);
}
}
}

活动.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".VenuesActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/myrecyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>

博客.java

package com.cornicore.icccricketworldcup2019;
public class Blog {
private String title;
private String desc;
private String image;
public Blog(String title, String desc, String image) {
this.title = title;
this.desc = desc;
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Blog(){
}
}

venue_row.xml(将回收器视图显示为卡片视图(

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_margin="7dp"
app:cardCornerRadius="12dp"
android:elevation="90dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="248dp"
android:orientation="vertical"
android:background="#121111">
<ImageView
android:id="@+id/post_image"
android:layout_width="match_parent"
android:layout_height="180dp"
android:scaleType="centerCrop"/>
<TextView
android:id="@+id/post_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="POST TITLE"
android:textColor="#fff"/>
<TextView
android:id="@+id/post_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="POST DESC"
android:textColor="#fff"/>

</LinearLayout>

</android.support.v7.widget.CardView>

查看此处的文档: FirebaseUI-Readme

他们改变了FirebaseRecyclerAdapter的设置方式。 现在,您需要使用 FirebaseRecyclerOptions 来配置 FirebaseRecyclerAdapter

您收到该错误是因为您向构造函数传递了错误的数字和错误的参数类型。为了使它工作,您需要将FirebaseRecyclerOptions对象作为参数传递。在早期版本的 Firebase-UI 库中需要一个包含 4 个参数的构造函数。请参阅此处的官方文档。

如果您有兴趣,可以通过以下方式从Firebase实时数据库中检索数据并使用FirebaseRecyclerAdapterRecyclerView中显示数据。

onStart方法的代码中删除此逗号

FirebaseRecyclerAdapter<Blog,BlogViewHolder,>firebaseRecyclerAdapter
^

像下面的代码一样制作适配器..

public class RecyclerViewAdpater extends RecyclerView.Adapter<RecyclerViewAdpater.ItemViewHolder> {
List<String> mStringList = new ArrayList<>();// hear you can pass any pojo class object.
Context mContext;
public RecyclerViewAdpater(List<String> mStringList, Context mContext) {
this.mStringList = mStringList;
this.mContext = mContext;
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, parent, false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
// below code handle click event on recycler view item.
String data=mStringList.get(position);
holder.textView.setText(data);
}
@Override
public int getItemCount() {
return mStringList.size();
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ItemViewHolder(View itemView) {
super(itemView);
}
}
}

然后在主活动中获取数据后,然后在调用下面的代码之后。

RecyclerViewAdpater recyclerViewAdpater=new RecyclerViewAdpater(this,stringlist);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(recyclerViewAdpater);
recyclerViewAdpater.notifyDataSetChanged();

确保传递数据列表不为空。

最新更新