当我尝试执行代码并且应用程序也终止时,会发生以下错误。 (由: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.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 的新实例。