Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android FirebaseRecyclerAdapter can';t从Firebase数据库检索数据_Android_Firebase_Firebase Realtime Database_Android Recyclerview_Firebaseui - Fatal编程技术网

Android FirebaseRecyclerAdapter can';t从Firebase数据库检索数据

Android FirebaseRecyclerAdapter can';t从Firebase数据库检索数据,android,firebase,firebase-realtime-database,android-recyclerview,firebaseui,Android,Firebase,Firebase Realtime Database,Android Recyclerview,Firebaseui,我试图在我的主要活动(主页)上显示博客帖子。但主页什么也没显示,我的意思是主页是空的 Firebase数据库结构: public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private RecyclerView mBlogList; private DatabaseReference mDataRef; priv

我试图在我的主要活动(主页)上显示博客帖子。但主页什么也没显示,我的意思是主页是空的

Firebase数据库结构:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private RecyclerView mBlogList;
    private DatabaseReference mDataRef;
    private FirebaseRecyclerAdapter<BlogInfo, ViewHolder> adapter;

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

        Log.d(TAG, "onCreate: started!");
        mDataRef = FirebaseDatabase.getInstance().getReference().child("BlogApp").child("Posts");
        mBlogList = findViewById(R.id.blogListId);
        mBlogList.setHasFixedSize(true);
        mBlogList.setLayoutManager(new LinearLayoutManager(this));

        FirebaseRecyclerOptions<BlogInfo> options = new FirebaseRecyclerOptions.Builder<BlogInfo>()
                .setQuery(mDataRef, BlogInfo.class).build();

        adapter = new FirebaseRecyclerAdapter<BlogInfo, ViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull BlogInfo model) {

                String imgUrl = model.getImage();
                Picasso.get().load(imgUrl).into(holder.post_image);
                holder.post_title.setText(model.getTitle());
                holder.post_desc.setText(model.getDescription());

            }

            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                Log.d(TAG, "onCreateViewHolder: initialized!");
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_blog_item, parent, false);
                ViewHolder holder = new ViewHolder(view);
                return holder;
            }
        };
        mBlogList.setAdapter(adapter);

    }

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
        Log.d(TAG, "onStart: init");
    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
        Log.d(TAG, "onStop: stop Blog list");
    }

    // ViewHolder Class
    public static class ViewHolder extends RecyclerView.ViewHolder{
        private static final String TAG = "ViewHolder";
        TextView post_title;
        TextView post_desc;
        ImageView post_image;

        ViewHolder(View itemView) {
            super(itemView);
            Log.d(TAG, "ViewHolder: Initialized!");
            post_title = itemView.findViewById(R.id.postTitleId);
            post_desc = itemView.findViewById(R.id.postDescId);
            post_image = itemView.findViewById(R.id.postImageId);
        }
    }
}
public class BlogInfo {
    private String description;
    private String image;
    private String title;

    public BlogInfo() {}

    public BlogInfo(String title, String description, String image) {
        this.title = title;
        this.description = description;
        this.image = image;
    }

    public String getTitle() {return title;}

    public void setTitle(String title) {this.title = title;}

    public String getDescription() {return description;}

    public void setDescription(String description) {this.description = description;}

    public String getImage() {return image;}

    public void setImage(String image) {this.image = image;}
}

main活动:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private RecyclerView mBlogList;
    private DatabaseReference mDataRef;
    private FirebaseRecyclerAdapter<BlogInfo, ViewHolder> adapter;

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

        Log.d(TAG, "onCreate: started!");
        mDataRef = FirebaseDatabase.getInstance().getReference().child("BlogApp").child("Posts");
        mBlogList = findViewById(R.id.blogListId);
        mBlogList.setHasFixedSize(true);
        mBlogList.setLayoutManager(new LinearLayoutManager(this));

        FirebaseRecyclerOptions<BlogInfo> options = new FirebaseRecyclerOptions.Builder<BlogInfo>()
                .setQuery(mDataRef, BlogInfo.class).build();

        adapter = new FirebaseRecyclerAdapter<BlogInfo, ViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull BlogInfo model) {

                String imgUrl = model.getImage();
                Picasso.get().load(imgUrl).into(holder.post_image);
                holder.post_title.setText(model.getTitle());
                holder.post_desc.setText(model.getDescription());

            }

            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                Log.d(TAG, "onCreateViewHolder: initialized!");
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_blog_item, parent, false);
                ViewHolder holder = new ViewHolder(view);
                return holder;
            }
        };
        mBlogList.setAdapter(adapter);

    }

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
        Log.d(TAG, "onStart: init");
    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
        Log.d(TAG, "onStop: stop Blog list");
    }

    // ViewHolder Class
    public static class ViewHolder extends RecyclerView.ViewHolder{
        private static final String TAG = "ViewHolder";
        TextView post_title;
        TextView post_desc;
        ImageView post_image;

        ViewHolder(View itemView) {
            super(itemView);
            Log.d(TAG, "ViewHolder: Initialized!");
            post_title = itemView.findViewById(R.id.postTitleId);
            post_desc = itemView.findViewById(R.id.postDescId);
            post_image = itemView.findViewById(R.id.postImageId);
        }
    }
}
public class BlogInfo {
    private String description;
    private String image;
    private String title;

    public BlogInfo() {}

    public BlogInfo(String title, String description, String image) {
        this.title = title;
        this.description = description;
        this.image = image;
    }

    public String getTitle() {return title;}

    public void setTitle(String title) {this.title = title;}

    public String getDescription() {return description;}

    public void setDescription(String description) {this.description = description;}

    public String getImage() {return image;}

    public void setImage(String image) {this.image = image;}
}

这是我第一次尝试使用
FirebaseRecyclerAdapter
从Firebase数据库检索数据。但我不知道问题出在哪里。我也尝试过调试,但编译器不会进入
onCreateViewHolder
onBindViewHolder
函数。但我完全遵循参考。

要解决此问题,您需要删除以下代码行:

mBlogList.setHasFixedSize(true);

只有当您希望您的
RecyclerView
具有固定大小时,才需要此选项。在您的情况下不需要注释。

您是否尝试注释以下代码行
mBlogList.setHasFixedSize(true)?您的代码很好。请再添加你的.XML文件。哦,我看到它现在工作了。在//mBlogList.setHasFixedSize之后(true);在这一行做注释。谢谢兄弟,我不敢相信这是解决办法。真的非常感谢@AlexMamoYes我知道,问题发生时没有固定数量的帖子。