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

错误“RecyclerView:未附加适配器;跳过布局“[重复]

徐新荣
2023-03-14

我收到以下错误:“RecyclerView:未附加适配器;跳过布局”但我已附加适配器...我试过很多不同的方法,但都解决不了这个错误。

我正在使用Volley库获取数据。当我启动activity时,直到结束只有进度条可见,并且收到上面的Logcat消息。我已经在MainActivity中添加了带有适配器的RecycleView。你能帮帮我吗?

下面是我的代码:

主要活动

public class MainActivity extends AppCompatActivity {
    private RequestQueue mRequestQueue;
    private ArrayList<Earthquake> mEarthquake;
    private RecyclerView mRecycleView;
    private EarthquakeAdapter adapter;
    
    boolean isConnected;
       
    TextView emptyView;
    ProgressBar loadingIndicator;
    
    private static final String USS_REQUEST_URL = "https://earthquake.usgs.gov/fdsnws/event/1/query";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        final ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        Read_network_state(cm);
    
        loadingIndicator = findViewById(R.id.loading_indicator);
        emptyView = findViewById(R.id.empty_view);
    
        mRecycleView = this.findViewById(R.id.recycle_list);
        mRecycleView.setHasFixedSize(true);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        mRecycleView.setLayoutManager(manager);
        mEarthquake = new ArrayList<>();
    
        mRequestQueue = Volley.newRequestQueue(this);
    
        if (isConnected) {
            Uri uri = Uri.parse(USS_REQUEST_URL);
            Uri.Builder buider = uri.buildUpon();
    
            parseEarthquake(buider.toString());
        }
    }
    
    private void parseEarthquake(String key) {
        final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, key.toString(), null, response -> {
            double magnitude = Double.parseDouble("");
            String location = "";
            long time = Long.parseLong("");
            String url = "";
    
            try {
                JSONArray feature = response.getJSONArray("feature");
                for (int i = 0; i < feature.length(); i++) {
                    JSONObject features = feature.getJSONObject(i);
                    JSONObject properties = features.getJSONObject("properties");
                    magnitude = properties.getDouble("mag");
                    location = properties.getString("place");
                    time = properties.getLong("time");
                    url = properties.getString("url");
                }
    
                Earthquake earthquake = new Earthquake(magnitude, location, time, url);
                mEarthquake.add(earthquake);
    
                adapter = new EarthquakeAdapter(MainActivity.this, mEarthquake);
                mRecycleView.setAdapter(adapter);
    
    
                Log.d("Ruhul", "No adapter");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }, error -> {
            // Nothing
        });

        mRequestQueue.add(request);
    }

    public void Read_network_state(ConnectivityManager connectivityManager) {
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) {
            isConnected = true;
            Log.d("Ruhul", "CONNECTED TO INTERNET");
        } else {
            isConnected = false;
        }
    }
}
    

地震适配器

public class EarthquakeAdapter extends RecyclerView.Adapter<EarthquakeAdapter.MyViewHolder> {
    private Context mContext;
    private List<Earthquake> mData;
    
    public EarthquakeAdapter(Context mContext, List<Earthquake> mData) {
        this.mContext = mContext;
        this.mData = mData;
    }
    
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        LayoutInflater inflater = LayoutInflater.from(mContext);
        view = inflater.inflate(R.layout.earthquake_raw, parent, false);
        final MyViewHolder viewHolder = new MyViewHolder(view);
    
        return viewHolder;
    }
    
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int i) {
        Earthquake earthquake = mData.get(i);
        double earthquakeMagnitude = earthquake.getMagnitude();
    
        DecimalFormat decimalFormat = new DecimalFormat("0.0");
        String formattedMagnitude = decimalFormat.format(earthquakeMagnitude);
    
        holder.tvMagnitude.setText(formattedMagnitude);
    
        Date dateObject = new Date(earthquake.getTimeInMilliseconds());
        String formattedDate = formatDate(dateObject);
        holder.tvDate.setText(formattedDate);
    
        String formattedTime = formatTime(dateObject);
        holder.tvTime.setText(formattedTime);
    
        String originalLocation = earthquake.getLocation();
            
        holder.magnitudeCircle = (GradientDrawable) holder.tvMagnitude.getBackground();
    
        int magnitudecolor = getMagnitudeColor(earthquake.getMagnitude());
        holder.magnitudeCircle.setColor(magnitudecolor);
    
        if (originalLocation.contains("of")) {
            String[] parts = originalLocation.split("of");
            holder.tvLocationOffSet.setText(parts[0] + "of");
            holder.tvPrimaryLocation.setText(parts[1]);
        } else {
            holder.tvLocationOffSet.setText("Near The");
            holder.tvPrimaryLocation.setText(originalLocation);
        }
    }
    
    @Override
    public int getItemCount() {
        return mData.size();
    }
    
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tvMagnitude, tvLocationOffSet, tvPrimaryLocation, tvDate, tvTime;
        LinearLayout container;
        GradientDrawable magnitudeCircle;
    
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
    
            tvMagnitude = itemView.findViewById(R.id.magnitude);
            tvLocationOffSet = itemView.findViewById(R.id.location_offset);
            tvPrimaryLocation = itemView.findViewById(R.id.primary_location);
            tvDate = itemView.findViewById(R.id.date);
            tvTime = itemView.findViewById(R.id.time);
            container = itemView.findViewById(R.id.container);
        }
    }
    
    /**
     * Return the color of the magitude circle based on the intensity of the earthquake.
     *
     * @param magnitude of the earthquake
     */
    private int getMagnitudeColor(double magnitude) {
        int magnitudeColorResourceId;
        int magnitudeFloor = (int) Math.floor(magnitude);
        switch (magnitudeFloor) {
            case 0:
            case 1:
                magnitudeColorResourceId = R.color.magnitude1;
                break;
    
            case 2:
                magnitudeColorResourceId = R.color.magnitude2;
                break;
    
            case 3:
                magnitudeColorResourceId = R.color.magnitude3;
                break;
    
            case 4:
                magnitudeColorResourceId = R.color.magnitude4;
                break;
    
            case 5:
                magnitudeColorResourceId = R.color.magnitude5;
                break;
    
            case 6:
                magnitudeColorResourceId = R.color.magnitude6;
                break;
    
            case 7:
                magnitudeColorResourceId = R.color.magnitude7;
                break;
    
            case 8:
                magnitudeColorResourceId = R.color.magnitude8;
                break;
    
            case 9:
                magnitudeColorResourceId = R.color.magnitude9;
                break;
    
            default:
                magnitudeColorResourceId = R.color.magnitude10plus;
                break;
        }
    
        return ContextCompat.getColor(mContext, magnitudeColorResourceId);
    }
    
    private String formatDate(Date dateObject) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("LLL dd, yyyy");

        return dateFormat.format(dateObject);
    }
    
    private String formatTime(Date dateObject) {
        SimpleDateFormat timeFormat = new SimpleDateFormat("h:mm a");

        return timeFormat.format(dateObject);
    }
}
    

mainactivity.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:tools="http://schemas.android.com/tools">
        
    <TextView 
        android:id="@+id/empty_view" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true" 
        android:textAppearance="?android:textAppearanceMedium"/>

    <androidx.recyclerview.widget.RecyclerView 
        android:id="@+id/recycle_list" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:orientation="vertical" 
        tools:listitem="@layout/earthquake_raw"/>
        
    <ProgressBar 
        android:id="@+id/loading_indicator" 
        style="@style/Widget.AppCompat.ProgressBar" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"/>
</RelativeLayout>

EquestakerAw.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:orientation="horizontal"
    android:paddingStart="16dp"
    android:paddingLeft="16dp"
    android:paddingEnd="16dp"
    android:paddingRight="16dp">
    <TextView
        android:id="@+id/magnitude"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_gravity="center_vertical"
        android:background="@drawable/magnitude_circle"
        android:fontFamily="sans-serif-medium"
        android:gravity="center"
        android:textColor="@android:color/black"
        android:textSize="16sp"
        tools:text="8.9" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_weight="1"
        android:orientation="vertical">
        <TextView
            android:id="@+id/location_offset"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:fontFamily="sans-serif-medium"
            android:maxLines="1"
            android:textAllCaps="true"
            android:textColor="@android:color/black"
            android:textSize="12sp"
            tools:text="30km S of" />

        <TextView
            android:id="@+id/primary_location"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="2"
            android:textColor="@android:color/black"
            android:textSize="12sp"
            tools:text="Long placeholder that should wrap to more than 2 line of text" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:textColor="@color/textColorEarthquakeDetails"
            android:textSize="12sp"
            tools:text="Mar 6, 2010" />

        <TextView
            android:id="@+id/time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:textColor="@color/textColorEarthquakeDetails"
            android:textSize="12sp"
            tools:text="3:00 PM" />
    </LinearLayout>
</LinearLayout>

共有1个答案

闻人昊昊
2023-03-14

始终尝试在主UI线程中或在异步任务之外附加适配器。此外,您还可以在oncreate()中添加此代码。并且在填充MeartHQuakearraylist时,调用Adapter.NotifyDataSetChanged()

adapter = new EarthquakeAdapter(MainActivity.this, mEarthquake);
            mRecycleView.setAdapter(adapter); 
 类似资料:
  • 我已经提到了相当少的帖子关于这个错误,但没有一个能够解决我的问题。我有一个片断,在这里我使用修改获得了我的值,我已经在下面显示了: 下面是我的RecyclerView适配器类:

  • 我一直在stackoverflow和这篇博文上阅读不同的答案,并试图实现它们的解决方案,但我仍然得到错误: 片段中的布局: 和项目的布局: 我做错了什么? 编辑:以下是适配器:

  • 我需要帮助,我有一个错误,那就是这个:E/recyclerView:没有连接适配器;跳过布局 代码: 公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View View=inflater.inflate(r.layout.fragment_chats,container,

  • 我正在使用一个片段来查看一个RecyclerView。但我总是犯这个错误 E/RecyclerView:未附加适配器;跳过布局 我已经为我的recyclerview创建了一个适配器,但布局没有显示。php后端运行良好。谁能帮帮我。下面是我的片段和适配器代码 Tips.java TipAdapter.java

  • 我正在编写一个应用程序,该应用程序通过接收Json文件的API来显示票房的rrank,如果我评论有关的代码,一切都可以正常工作。适配器代码很好,我猜想如果没有,日志是这样的: 我认为代码的顺序是错误的,但不知道确切的...主要活动.java是:

  • 当应用程序启动时,我得到一个空白屏幕,当我检查日志时,我得到:E/回收人员视图:没有连接适配器;跳过布局错误 我不知道为什么?任何想法,它似乎没有附加回收器视图或添加任何数据,我附加了Main活动、DataAdapter和数据类。 主要活动 数据适配器 下面是我的数据类,将从中提取数据 我ncluded.java 收集器和设置器 这是jsonResponse类,在接口中引用 感谢任何帮助。