You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中小费计算器使用toDouble()遇未解析引用错误求助

解决Kotlin中「unresolved reference: toDouble/toInt」错误

我在Android Studio开发Android Basics Kotlin课程的小费计算器应用时,尝试用toDouble()将字符串转为Double类型,出现「unresolved reference: toDouble」错误,即使粘贴课程官网示例代码问题依然存在,调用toInt()也遇到相同报错。

相关代码

MainActivity.kt

package com.example.tiptime

import java.text.NumberFormat
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.tiptime.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.calculateButton.setOnClickListener{ calculateTip() }
    }

    fun calculateTip() {
        val stringInTextField = binding.costOfService.text.toString()
        val cost = stringInTextField.toDouble()
    }
}

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"
    android:padding="16dp"
    tools:context=".MainActivity"
    tools:ignore="UseSwitchCompatOrMaterialXml">

    <EditText
        android:id="@+id/cost_of_service"
        android:layout_width="160dp"
        android:layout_height="wrap_content"
        android:hint="@string/cost_of_service"
        android:inputType="numberDecimal"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:autofillHints="@string/cost_of_service" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/how_was_the_service"
        android:id="@+id/service_question"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/cost_of_service"/>

    <RadioGroup
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/tip_options"
        android:checkedButton="@+id/option_twenty_percent"
        app:layout_constraintTop_toBottomOf="@id/service_question"
        app:layout_constraintStart_toStartOf="parent">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/option_twenty_percent"
            android:text="@string/amazing_20"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/option_eighteen_percent"
            android:text="@string/great_18"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/option_fifteen_percent"
            android:text="@string/ok_15"/>
    </RadioGroup>

    <Switch
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/round_up_switch"
        android:text="@string/round_up_tip"
        android:checked="true"

        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tip_options" />
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/calculate"
        android:id="@+id/calculate_button"

        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/round_up_switch"
        />
    <TextView
        android:id="@+id/tip_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tip_amount"

        app:layout_constraintTop_toBottomOf="@id/calculate_button"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

错误截图

错误截图

解决方案

  • 检查Kotlin依赖配置
    确保项目根目录build.gradle(Project级)中Kotlin插件版本为稳定版:

    plugins {
        id 'com.android.application' version '7.4.2' apply false
        id 'com.android.library' version '7.4.2' apply false
        id 'org.jetbrains.kotlin.android' version '1.8.20' apply false
    }
    

    并在Module级build.gradle中启用Kotlin插件:

    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
    }
    
  • 清理重建项目并清除缓存
    依次执行:

    1. 菜单栏Build > Clean Project
    2. Build > Rebuild Project
    3. File > Invalidate Caches...,选择「Invalidate and Restart」重启IDE
  • 确认视图绑定启用
    在Module级build.gradle中确保开启视图绑定:

    android {
        ...
        buildFeatures {
            viewBinding true
        }
    }
    
  • 添加空字符串校验(可选)
    提前处理空输入,避免后续潜在异常:

    fun calculateTip() {
        val stringInTextField = binding.costOfService.text.toString()
        if (stringInTextField.isNotBlank()) {
            val cost = stringInTextField.toDouble()
            // 后续小费计算逻辑
        }
    }
    

内容的提问来源于stack exchange,提问作者VakhtangChachanidze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:30:30