简体   繁体   English

为什么我的子模型不能转换为 java.util.ArrayList

[英]why my submodel cannot be cast to java.util.ArrayList

I'm making a recyclerview with multilevel data, and there is a problem when entering data into the sub-adapter.我正在使用多级数据制作recyclerview,将数据输入子适配器时出现问题。 appear error like this "model cannot be cast to java.util.ArrayList android"出现这样的错误“模型无法转换为 java.util.ArrayList android”

my json我的 json

[{
    "header" : "buah air",
    "sub"    : {
                "warna" : "merah",
                "jenis" : "air"
               }
     },{
    "header" : "buah serat",
    "sub"    : {
                "warna" : "hijau",
                "jenis" : "serat"
               }

}]

my model我的 model

data class mTOP (
    val header : String,
    @SerializedName("sub") val sub : mSubTOP
)

data class mSubTOP(
    val warna : String,
    val jenis : String
)

my MainActivity我的主要活动

val adapter =  adapter_top(response!!.body() as ArrayList<mTOP>)
rv.adapter = adapter

my adapter_top (here an error occurs)我的adapter_top(这里发生错误)

override fun onBindViewHolder(holder: adapter_top.ViewHolder, position: Int) {

        holder.tvHeader?.text = Datane[position].header

        holder.rvList?.layoutManager = LinearLayoutManager(holder.rvList.context, LinearLayout.VERTICAL, false)
        var adapterSub = adapter_sub(Datane[position].sub as ArrayList<mSubTOP>)
        holder.rvList?.adapter = adapterSub
    }

my adapter_sub我的适配器_sub

class adapter_sub(val Datane: ArrayList<mSubTOP>): RecyclerView.Adapter<adapter_sub.ViewHolder>() {

}

Because it's not ArrayList at all:) You have to create a list with one element:因为它根本不是ArrayList :) 您必须创建一个包含一个元素的列表:

adapter_sub(arrayListOf(Datane[position].sub))

this complete my adapter_sub这完成了我的 adapter_sub

class adapter_sub(val Datane: ArrayList<mSubTOP>): RecyclerView.Adapter<adapter_sub.ViewHolder>() {

    override fun onBindViewHolder(holder: adapter_sub.ViewHolder, position: Int) {
        val location = Datane[position]
        holder.tvName?.text = location.warna
        holder.tvHobi?.text = location.jenis

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): adapter_sub.ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.layout_sub, parent, false)
        return ViewHolder(v)
    }

    override fun getItemCount(): Int {
        return Datane.size
    }

    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        val tvName = itemView.findViewById<TextView>(R.id.tvJenis)
        val tvHobi = itemView.findViewById<TextView>(R.id.tvWarna)
    }
}

layout activity_main.xml布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/RvMain"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" >

    </androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>

layout layout_top.xml布局 layout_top.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp">

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

            <TextView
                android:id="@+id/tvHeader"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_marginTop="16dp"
                android:gravity="center_vertical"
                android:text="Date"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Large"
                android:textColor="#009688"
                android:textSize="18sp" />

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvItem"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="8dp"
                android:layout_marginStart="8dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

            </androidx.recyclerview.widget.RecyclerView>

        </LinearLayout>

    </androidx.cardview.widget.CardView>

</LinearLayout>

layout layout_sub.xml布局 layout_sub.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="10dp">

        <TextView
            android:id="@+id/locationBadge"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@drawable/circle_badge"
            android:gravity="center_vertical|center_horizontal"
            android:text="✓"
            android:textColor="#fff"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="10dp">

            <TextView
                android:id="@+id/tvWarna"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="Name"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/tvJenis"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="Address"
                android:textSize="16sp" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

this my stack trace这是我的堆栈跟踪

10-20 06:24:08.445 11624-11624/br.com.mirabilis.jambu_air E/AndroidRuntime: FATAL EXCEPTION: main
    Process: br.com.mirabilis.jambu_air, PID: 11624
    android.view.InflateException: Binary XML file line #14: Binary XML file line #14: Error inflating class TextView
        at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at br.com.mirabilis.jambu_air.adapter.adapter_sub.onCreateViewHolder(adapter_sub.kt:23)
        at br.com.mirabilis.jambu_air.adapter.adapter_sub.onCreateViewHolder(adapter_sub.kt:13)
        at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3336)
        at android.view.View.measure(View.java:18811)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18811)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.cardview.widget.CardView.onMeasure(CardView.java:260)
        at android.view.View.measure(View.java:18811)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18811)
        at androidx.recyclerview.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:9119)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1583)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at android.widget.LinearLayout.setCh
10-20 06:24:08.448 11624-11624/br.com.mirabilis.jambu_air E/MQSEventManagerDelegate: failed to get MQSService.
10-20 06:24:08.473 11624-11624/br.com.mirabilis.jambu_air I/Process: Sending signal. PID: 11624 SIG: 9

暂无
暂无

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

相关问题 错误:找不到字段的设置器。 - java.util.ArrayList 中的大小 - Room 中的嵌入式 ArrayList 无法编译 - error: Cannot find setter for field. - size in java.util.ArrayList - Embedded ArrayList in Room unable to compile 在 Kotlin 中,为什么 mutableListOf 返回 java.util.ArrayList 的实例,而 listOf 返回 java.util.Arrays$ArrayList 的实例? - In Kotlin, why does mutableListOf return an instance of java.util.ArrayList, while listOf returns an instance of java.util.Arrays$ArrayList? onRetrofitFailure()无法从START_OBJECT标记中反序列化`java.util.ArrayList`的实例 - onRetrofitFailure() Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token 无法反序列化`java.util.ArrayList 的实例<java.lang.Object> ` 在 START_OBJECT 令牌 Vert.x 之外 - Cannot deserialize instance of `java.util.ArrayList<java.lang.Object>` out of START_OBJECT token Vert.x 错误:[Dagger/MissingBinding] java.util.ArrayList<java.lang.integer> 如果没有 @Inject 构造函数或 @Provides-annotated 方法,则无法提供</java.lang.integer> - error: [Dagger/MissingBinding] java.util.ArrayList<java.lang.Integer> cannot be provided without an @Inject constructor or an @Provides-annotated meth Eclipse Installer &gt; Eclipse IDE For Java Developers &gt; Eclipse &gt; Eclipse Marketplace &gt; Kotlin &gt; java.util.ArrayList? - Eclipse Installer > Eclipse IDE For Java Developers > Eclipse > Eclipse Marketplace > Kotlin > java.util.ArrayList? kotlin.collections.List 类型的变量变为 java.util.Arraylist 并导致错误 - variable of type kotlin.collections.List becomes java.util.Arraylist and causes error 在我的应用程序中,不能将null强制转换为非null类型的java.util.HashMap - null cannot be cast to non-null type java.util.HashMap in my application ArrayList 不能转换为 java.lang.Object[] - ArrayList cannot be cast to java.lang.Object[] Out-projected type &#39;ArrayList&lt;*&gt;&#39; 禁止使用&#39;public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList&#39; - Out-projected type 'ArrayList<*>' prohibits the use of 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM