如何解决此问题:androidx.appcompat.widget.AppCompatEditText 无法转换为 android.content.Context

问题描述 投票:0回答:1

当我尝试执行代码并且应用程序也终止时,会发生以下错误。 (由:java.lang.ClassCastException引起:androidx.appcompat.widget.AppCompatEditText无法转换为android.content.Context) 我想知道如何解决它。请告诉我可以解决的方法。谢谢!

package com.example.scoremanagement

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.lifecycle.ViewModelProvider
import kotlin.concurrent.thread

class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
        val scoreDao = AppDatabase.getDataBase(this).ScoreDao()
        val editTextMap = mapOf(
            R.id.editTextTestType to EditText(findViewById(R.id.editTextTestType)),
            R.id.editTextMathScore to EditText(findViewById(R.id.editTextMathScore)),
        )
        val score = viewModel.getScoreDetails(editTextMap)
        val saveScoreBtn: Button = findViewById(R.id.saveScoreBtn)
        saveScoreBtn.setOnClickListener {
            thread {
                score.id = scoreDao.insertScore(score)
            }

        }
    }
}

xml

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

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

        <androidx.core.widget.NestedScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            android:fitsSystemWindows="true">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:paddingLeft="22dp"
                android:paddingRight="22dp"
                android:paddingBottom="22dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="10dp"
                    android:gravity="start"
                    android:text="请输入考试类型和各科分数并保存!"
                    android:textSize="22sp" />

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

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:inputType="text"
                        android:text="类型:"
                        android:textSize="18sp" />

                    <EditText
                        android:id="@+id/editTextTestType"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="例:七上月考;八下期中;一模等"
                        android:inputType="text" />
                </LinearLayout>

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

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="数学:"
                        android:textSize="18sp" />

                    <EditText
                        android:id="@+id/editTextMathScore"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="例:119.5"
                        android:inputType="numberDecimal" />
                </LinearLayout>

                
                <Button
                    android:id="@+id/saveScoreBtn"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="20dp"
                    android:layout_marginBottom="20dp"
                    android:text="保存分数"
                    android:textSize="20sp" />
            </LinearLayout>
        </androidx.core.widget.NestedScrollView>

    </LinearLayout>
</LinearLayout>

我想知道如何解决它。 请告诉我可以修复它的方法。 谢谢!

java android kotlin classcastexception
1个回答
0
投票

出现错误 java.lang.ClassCastException: androidx.appcompat.widget.AppCompatEditText 无法转换为 android.content.Context 是因为在 MainActivity 中您尝试将 EditText 直接传递给 EditText 构造函数而不是 Context。这发生在以下行中:

val editTextMap = mapOf(
    R.id.editTextTestType to EditText(findViewById(R.id.editTextTestType)),
    R.id.editTextMathScore to EditText(findViewById(R.id.editTextMathScore)),
)

尝试这个

val editTextMap = mapOf(
    R.id.editTextTestType to findViewById<EditText>(R.id.editTextTestType),
    R.id.editTextMathScore to findViewById<EditText>(R.id.editTextMathScore)
)

这样,您将从 findViewById 获取的 EditText 引用传递到地图,而不是尝试创建 EditText 的新实例。

© www.soinside.com 2019 - 2024. All rights reserved.