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

RecyclerView:未连接适配器;跳过布局,改装[重复]

刘嘉木
2023-03-14

大家晚上好,我一直在寻找一个解决方案,以解决android studio的日志发送错误,使用RecyclerView显示JSON“产品”列表,并进行了改装。

我已经阅读了与此错误相关的问题,但我无法找到符合我需求的正确答案。

Android:回收人员视图:没有附加适配器;跳过布局

未连接适配器;跳过布局回收视图错误

recyclerview未连接适配器;跳过布局

未连接适配器;跳过布局onCreateView()

这是android studio显示的de错误日志

回收人员视图:没有连接适配器;跳过布局

回收人员视图:没有连接适配器;跳过布局

表面:getSlotFromBufferLocked:未知缓冲区:0xa3d9a700

在0xa2b6bb00(RippleDrawable)上使用手柄0xa200a310

java.lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列路径处为BEGIN\u数组$

对于这个项目,使用了这个类和布局文件

“Producto”类

public class Producto {

    @SerializedName("id")
    @Expose
    private int id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("status")
    @Expose
    private String status;
    @SerializedName("price")
    @Expose
    private String price;
    @SerializedName("regular_price")
    @Expose
    private String regularPrice;
    @SerializedName("sale_price")
    @Expose
    private String salePrice;
    @SerializedName("price_html")
    @Expose
    private String priceHtml;
    @SerializedName("on_sale")
    @Expose
    private boolean onSale;
    @SerializedName("total_sales")
    @Expose
    private int totalSales;
    @SerializedName("purchase_note")
    @Expose
    private String purchaseNote;
    @SerializedName("categories")
    @Expose
    private List<Category> categories;
    @SerializedName("menu_order")
    @Expose
    private int menuOrder;


    /**
     *
     * @return
     * The id
     */
    public int getId() {
        return id;
    }

    /**
     *
     * @param id
     * The id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     *
     * @return
     * The name
     */
    public String getName() {
        return name;
    }

    /**
     *
     * @param name
     * The name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     *
     * @return
     * The status
     */
    public String getStatus() {
        return status;
    }

    /**
     *
     * @param status
     * The status
     */
    public void setStatus(String status) {
        this.status = status;
    }

    /**
     *
     * @return
     * The price
     */
    public String getPrice() {
        return price;
    }

    /**
     *
     * @param price
     * The price
     */
    public void setPrice(String price) {
        this.price = price;
    }

    /**
     *
     * @return
     * The regularPrice
     */
    public String getRegularPrice() {
        return regularPrice;
    }

    /**
     *
     * @param regularPrice
     * The regular_price
     */
    public void setRegularPrice(String regularPrice) {
        this.regularPrice = regularPrice;
    }

    /**
     *
     * @return
     * The salePrice
     */
    public String getSalePrice() {
        return salePrice;
    }

    /**
     *
     * @param salePrice
     * The sale_price
     */
    public void setSalePrice(String salePrice) {
        this.salePrice = salePrice;
    }

    /**
     *
     * @return
     * The priceHtml
     */
    public String getPriceHtml() {
        return priceHtml;
    }

    /**
     *
     * @param priceHtml
     * The price_html
     */
    public void setPriceHtml(String priceHtml) {
        this.priceHtml = priceHtml;
    }

    /**
     *
     * @return
     * The onSale
     */
    public boolean isOnSale() {
        return onSale;
    }

    /**
     *
     * @param onSale
     * The on_sale
     */
    public void setOnSale(boolean onSale) {
        this.onSale = onSale;
    }

    /**
     *
     * @return
     * The totalSales
     */
    public int getTotalSales() {
        return totalSales;
    }

    /**
     *
     * @param totalSales
     * The total_sales
     */
    public void setTotalSales(int totalSales) {
        this.totalSales = totalSales;
    }

    /**
     *
     * @return
     * The purchaseNote
     */
    public String getPurchaseNote() {
        return purchaseNote;
    }

    /**
     *
     * @param purchaseNote
     * The purchase_note
     */
    public void setPurchaseNote(String purchaseNote) {
        this.purchaseNote = purchaseNote;
    }

    /**
     *
     * @return
     * The categories
     */
    public List<Category> getCategories() {
        return categories;
    }

    /**
     *
     * @param categories
     * The categories
     */
    public void setCategories(List<Category> categories) {
        this.categories = categories;
    }

    /**
     *
     * @return
     * The menuOrder
     */
    public int getMenuOrder() {
        return menuOrder;
    }

    /**
     *
     * @param menuOrder
     * The menu_order
     */
    public void setMenuOrder(int menuOrder) {
        this.menuOrder = menuOrder;
    }

}

“类别”类(与私有列表匹配

public class Category {

    @SerializedName("id")
    @Expose
    private int id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("slug")
    @Expose
    private String slug;

    /**
     *
     * @return
     * The id
     */
    public int getId() {
        return id;
    }

    /**
     *
     * @param id
     * The id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     *
     * @return
     * The name
     */
    public String getName() {
        return name;
    }

    /**
     *
     * @param name
     * The name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     *
     * @return
     * The slug
     */
    public String getSlug() {
        return slug;
    }

    /**
     *
     * @param slug
     * The slug
     */
    public void setSlug(String slug) {
        this.slug = slug;
    }
}

在这个名为“JSONproducts”的类中,两者都包含为数组

public class JSONproducts {

    private Producto[] products;
    private Category[] categories;

    public Producto[] getProducts(){

        return products;
    }

    public Category[] getCategories(){
        return categories;
    }
}

然后请求接口称为“讲师产品”

public interface LecturaProductos {

    @GET("Products")
    Call<JSONproducts> ListarProductos();

}

回收器视图的数据适配器称为“Adadador”

public class Adaptador extends RecyclerView.Adapter<Adaptador.ViewHolder> {

    private ArrayList<Producto> productos;
    private ArrayList<Category> categoria;

    public Adaptador(ArrayList<Producto> productos, ArrayList<Category> categoria){
        this.productos = productos;
        this.categoria = categoria;
    }

    @Override
    public Adaptador.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_view, parent, false );

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(Adaptador.ViewHolder holder, int position) {
        holder.nom_pro_tv.setText(productos.get(position).getName());
        holder.id_pro_tv.setText(productos.get(position).getId());
        holder.cat_pro.setText(categoria.get(position).getName());

    }

    @Override
    public int getItemCount() {

        return productos.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView nom_pro_tv, id_pro_tv, cat_pro;
        public ViewHolder(View itemView) {
            super(itemView);

            nom_pro_tv = (TextView)itemView.findViewById(R.id.nom_pro_tv);
            id_pro_tv = (TextView)itemView.findViewById(R.id.id_pro_tv);
            cat_pro = (TextView)itemView.findViewById(R.id.cat_pro_tv);
        }
    }
}

和活动类“ListaProductos”

public class ListaProductos extends AppCompatActivity {

    private RecyclerView recyclerView;
    private ArrayList<Producto> product;
    private ArrayList<Category> category;
    private Adaptador adaptador;



    public static final String BASE_URL= "https://mydomain.com.mx/wp-json/wc/v1/";

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

    }

    private void showView(){
        recyclerView = (RecyclerView)findViewById(R.id.prod_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        cargarJSON();

    }

    private void cargarJSON(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        final LecturaProductos producto = retrofit.create(LecturaProductos.class);
        Call<JSONproducts> productoCall = producto.ListarProductos();
        productoCall.enqueue(new Callback<JSONproducts>() {
            @Override
            public void onResponse(Call<JSONproducts> call, Response<JSONproducts> response) {

                JSONproducts jsonproducts = response.body();
                product = new ArrayList<>(Arrays.asList(jsonproducts.getProducts()));
                category = new ArrayList<>(Arrays.asList(jsonproducts.getCategories()));
                adaptador = new Adaptador(product, category);
                recyclerView.setAdapter(adaptador);
            }

            @Override
            public void onFailure(Call<JSONproducts> call, Throwable t) {
                Log.d("Error", t.getMessage());

            }
        });


    }
}

以及已使用的Layout XML文件

回收视图布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_lista_productos"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="mx.com.corpcap.elrollorepartidor.ListaProductos">

<android.support.v7.widget.RecyclerView
    android:id="@+id/prod_recycler_view"
    android:layout_height="match_parent"
    android:layout_width="match_parent"/></LinearLayout>

产品列表的CardView布局

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/nom_pro_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="16sp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"/>

        <TextView
            android:id="@+id/id_pro_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/cat_pro_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.v7.widget.CardView>

一切都很好,并且启动应用程序没有问题,但当尝试访问信息时,它会发送本问题开头引用的日志消息。

谢谢

共有1个答案

淳于健
2023-03-14

如果没有适配器提供它必须显示的数据,回收器视图本身就没有多大用处。因此,当回收器视图被初始化并放置在布局中,但尚未调用. setAdapter时,您遇到的问题就会发生。不如你拿一个空列表,在发送网络请求之前使用它来初始化适配器并将其设置为您的回收器视图。当您发出网络请求并获得响应时,只需清除列表中的旧值,添加新值并通知您的适配器列表中的数据已更改。亚历克斯,这应该可以避免跳过布局问题。

类似这样:

private ArrayList<YourObjectClass> listOfYourObjects = new ArrayList<>();
.
.
.
SomeAdapter yourAdapter = new SomeAdapter(listOfYourObjects , context);
yourRecyclerView.setAdapter(yourAdapter);
.
.
.
onResponse:
list.clear();
//Let the adapter know the list is empty now
yourAdapter.notifyDataSetChanged();
//Fill in your list with values from server using a for/while loop etc.
//Again notify your adapter that the list has changed:
yourAdapter.notifyDataSetChanged();

希望这有帮助。

 类似资料:
  • 我制作了一个基本的购物清单应用程序,它利用回收器视图来显示列表项目。我正在尝试使用带有片段的导航添加设置屏幕。我遇到了我的回收器视图的问题 主活动.kt HomeFragment.kt 设置Fragment.kt activity_main.xml fragment\u home.xml navigation.xml 不确定是否需要更多信息。提前道歉-我是android studio的新手

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

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

  • 我已经创建了一个片段,在该片段中有一个recycle view,但是当我的片段被加载时,什么也没有显示,它给出了这个错误“E/recycle view:没有连接适配器;跳过布局”。下面是适配器和片段类的代码,任何帮助都将不胜感激 适配器类: 片段类: fragment _ view _ all _ my _ recipes . XML view_all_recipe_item.xml

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