当前位置: 首页 > 知识库问答 >
问题:

RecyclerView:没有连接适配器--为什么我一直得到这个错误?

萧越泽
2023-03-14

只是想在回收器中显示我数据库中的信息。一切正常。将显示对象。

但logcat说:

E/RecyclerView: No adapter attached; skipping layout

这是我的代码(displayimages.java)

    public class DisplayImages extends AppCompatActivity {
    DatabaseReference databaseReference;

    RecyclerView recyclerView;

    RecyclerView.Adapter adapter;
    ProgressDialog progressDialog;

    List<ImageUploadInfo> list = new ArrayList<>();

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

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(DisplayImages.this));

        progressDialog = new ProgressDialog(DisplayImages.this);
        progressDialog.setMessage("Loading Images From Firebase.");
        progressDialog.show();

        // Setting up Firebase image upload folder path in databaseReference.
        // The path is already defined in MainActivity.
        databaseReference = FirebaseDatabase.getInstance().getReference(Main.Database_Path);

        databaseReference.addValueEventListener(new ValueEventListener() {
            @override
            public void onDataChange(DataSnapshot snapshot) {

                for (DataSnapshot postSnapshot : snapshot.getChildren()) {

                    ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);

                    list.add(imageUploadInfo);
                }

                adapter = new RecyclerViewAdapter(getApplicationContext(), list);

                recyclerView.setAdapter(adapter);
                progressDialog.dismiss();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                progressDialog.dismiss();

            }
        });

    }

如果有什么不同的话,这是我在MainActivity中写的关于DataBase_Path的内容:

public class Main extends AppCompatActivity implements View.OnClickListener {

DatabaseReference databaseReference;
public static final String Database_Path = "All_Image_Uploads_Database";

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

    databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);

如您所见,我已经为RecycleView附加了一个适配器。那么为什么我总是得到这个错误呢?

我读过与同一问题有关的其他问题,但都没有帮助。

共有1个答案

景建业
2023-03-14

您需要在设置layour管理器之后设置适配器,否则将得到您看到的错误消息。

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
//don't set adapter here
    recyclerView.setLayoutManager(new LinearLayoutManager(DisplayImages.this));

//set adapter here

此外,您可以先用一个空列表设置适配器,然后当您收到来自firebase的回调时,您可以更新该列表并在适配器上调用notifyDatasetChanged()。您看到的问题是由于这样一个事实,即在过程的很晚(当您的firebase调用返回时)才真正设置适配器

像这样:

recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(DisplayImages.this));
adapter = new RecyclerViewAdapter(getApplicationContext(), list);
 recyclerView.setAdapter(adapter);


databaseReference.addValueEventListener(new ValueEventListener() {
            @override
            public void onDataChange(DataSnapshot snapshot) {

                for (DataSnapshot postSnapshot : snapshot.getChildren()) {

                    ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);

                    list.add(imageUploadInfo);
                }
               adapter.notifyDatasetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                progressDialog.dismiss();

            }
        });
 类似资料:
  • ListPetientFragment。JAVA 错误是:2021-11-17 18:41:02.417 29997-29997/?E/rtphonemedicat:运行时设置的未知位_标志:0x8000 2021-11-17 18:41:03.628 29997-30029/com。尼戈特。smartphonemedicate E/GED:无法获取GED日志Buf,错误(0)2021-11-17

  • 我想从火力点实时数据库显示图片。(带有加密图像(字符串))类似加密图像是“照片” 函数loadPhoto() 问题出在哪里?我连接adapter和recyclerview,并设置GridManager。

  • {“error”:“invalid_scope”,“error_description”:“AADSTS70011:为输入参数”scope“提供的值无效。作用域 https://graph.microsoft.com/User.Read https://graph.microsoft.com/User.ReadWrite https://graph.microsoft.com/User.ReadB

  • 我试图解决这个问题:第三个最大数量 但我犯了这个错误 第4行:Char 37:运行时错误:有符号整数溢出:-9223372036854775808-10不能在类型“long long”(solution.cpp)摘要中表示:UndefinedBehaviorSanitizer:undefined behavior prog_joined。cpp:13:37 这是我的代码 有人能告诉我这个错误到底意

  • 问题内容: 我正在编写一个简单的项目,一个使用Swing编写的业务应用程序,它使用Hibernate作为后端。我来自Spring,这为我提供了使用hibernate和事务的简便方法。无论如何,我设法让Hibernate工作。昨天,在编写一些代码从数据库中删除bean的同时,我得到了以下信息: 删除代码很简单: 我的是: 其他详细信息:仅在关闭应用程序时,我才会在代码中关闭hibernate会话。这