简体   繁体   English

布局错误 output:: RecyclerView: 未连接适配器; 跳过布局

[英]Error in layout output:: RecyclerView: No Adapter attached; Skipping Layout

Upon trying to load a "log viewer" I'm building, the original pre-set layout doesn't show as output.在尝试加载我正在构建的“日志查看器”时,原始预设布局未显示为 output。 I do get the appropriate output from my Firebase database, but the layout is all messed up/way too spaced.我确实从我的 Firebase 数据库中得到了适当的 output,但是布局都搞砸了/间隔太远了。 What am I doing wrong?我究竟做错了什么?

This is my LogActivity Class public class LogActivity extends AppCompatActivity {这是我的 LogActivity Class public class LogActivity 扩展 AppCompatActivity {

List<Log> log;
RecyclerView recyclerView;
LogAdapter logAdapter;
DatabaseReference databaseReference;


DatabaseReference mbase; // Create object of the
// Firebase Realtime Database

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_log);
    recyclerView=findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    log=new ArrayList<>();

    databaseReference = FirebaseDatabase.getInstance().getReference("Logs");

    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for(DataSnapshot ds: snapshot.getChildren())
            {
                Log data = new Log(ds.getValue(String.class));
                log.add(data);
            }
            logAdapter = new LogAdapter(log);
            recyclerView.setAdapter(logAdapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

My Adapter Class is as shown below: public class LogAdapter extends RecyclerView.Adapter {我的适配器 Class 如下图所示: public class LogAdapter extends RecyclerView.Adapter {

List<Log> logList;

public LogAdapter(List<Log> logList) {
    this.logList = logList;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.log_layout, parent,false);
    ViewHolderClass viewHolderClass = new ViewHolderClass(view);

    return viewHolderClass;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    ViewHolderClass viewHolderClass=(ViewHolderClass)holder;
    Log log=logList.get(position);
    viewHolderClass.lockState.setText(log.getLockState());


}

@Override
public int getItemCount() {
    return logList.size();
}

public class ViewHolderClass extends RecyclerView.ViewHolder{

    TextView lockState;


    public ViewHolderClass(@NonNull View itemView) {
        super(itemView);
        lockState=itemView.findViewById(R.id.log_string);
    }
}

All of this interlocks with my " log" class which simply holds a string from my firebase DB所有这些都与我的“日志”class 互锁,它只包含来自我的 firebase DB 的字符串

public class Log {公共 class 日志 {

private String lockState;

public Log() {

}

public Log(String lockState) {
    this.lockState = lockState;
}

public String getLockState() {
    return lockState;
}

public void setLockState(String lockState) {
    this.lockState = lockState;
}

The following is the XML for my activity_log以下是我的activity_log的XML

<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:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cardBackground"
tools:context=".LogActivity">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginStart="4dp"
    android:layout_marginTop="4dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

XML for my log_layout file XML 用于我的 log_layout 文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/log_layout"
android:orientation="vertical">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/log_string"
    android:text="20sp"
    android:textColor="@android:color/black">

</TextView>

Lastly here are the simple strings I'm fetching and displaying successfully:最后是我成功获取和显示的简单字符串:

firebase-database firebase 数据库

With my actual output here: (scroll down and the next output is there)我的实际 output 在这里:(向下滚动,下一个 output 在那里)

app-output应用程序输出

You are getting the following warning , as it's not an Error nor an Exception:您收到以下警告,因为它不是错误也不是异常:

Error in layout output:: RecyclerView: No Adapter attached; Skipping Layout

Because you are trying to read "Log" objects that don't exist in the "Logs" location in your database.因为您正在尝试读取数据库中“日志”位置中不存在的“日志”对象。 If Log objects existed there, your database schema would have been looking like this:如果那里存在 Log 对象,您的数据库架构将如下所示:

Firebase-root
  |
  --- Logs
       |
       --- -MW6C...tJ_2
             |
             --- lockState: "14h01 - Connected - Locker is NOT empty"

Meaning that under the Logs node, you have a pushed key under which exists an object of type "Log".这意味着在 Logs 节点下,您有一个推送的密钥,其下存在一个“Log”类型的 object。 In your schema, you only have pushed keys that only hold some Strings, hence that warning.在您的架构中,您只推送了仅包含一些字符串的键,因此会发出警告。 There are two solutions.有两种解决方案。 The first is to change the schema as explained above, or to use an adapter class of type String, and not Log .第一个是如上所述更改架构,或者使用 String 类型的适配器 class ,而不是Log

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 没有附加适配器使用 RecyclerView 适配器跳过布局错误 - No Adapter Attached Skipping layout error with RecyclerView Adapter E/RecyclerView 错误:未连接适配器; 跳过布局 - Error with E/RecyclerView: No adapter attached; skipping layout E / RecyclerView:没有连接适配器; 跳过布局错误 - E/RecyclerView: No adapter attached; skipping layout error RecyclerView错误:未连接适配器; 跳过布局 - RecyclerView error: No adapter attached; skipping layout 错误:E / RecyclerView:未连接适配器; 跳过布局 - error: E/RecyclerView: No adapter attached; skipping layout 未连接适配器; 使用RecyclerView跳过布局 - No adapter attached; skipping layout with RecyclerView RecyclerView:没有附加适配器:跳过布局 - RecyclerView: No adapter attached:skipping layout 自定义适配器出现此错误RecyclerView 跳过布局 - custom adapter to has this error RecyclerView No adapter attached; skipping layout 对RecyclerView的更改导致此错误:E / RecyclerView:未附加适配器; 跳过布局 - Changes to RecyclerView led to this Error :E/RecyclerView: No adapter attached; skipping layout 未连接适配器; 跳过布局:RecyclerView(带适配器) - No adapter attached; skipping layout : RecyclerView (with adapter)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM