Kay*_*eru 7 java xml android android-layout android-studio-flamingo
`错误不断显示“需要恒定的表达式”,阻止我在设备上运行该应用程序以进一步开发该应用程序。
我正在尝试创建一种谷歌支付..所以我需要选定的金额。但我收到一个错误,说“需要常量表达式”。该变量被声明为私有而不是最终的,所以我不知道为什么会收到此错误。该值甚至没有突出显示,表明它正在被使用。我该如何解决这个错误。我尝试将变量初始化为零,但它仍然没有帮助..`
package com.example.greenearth;
import android.media.Image;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class Donations extends Fragment {
RadioGroup radioGroup;
RadioButton minimum;
RadioButton average;
RadioButton maximum;
private int google_amount=0;
RelativeLayout rl;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_donations, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
radioGroup=view.findViewById(R.id.select);
minimum=view.findViewById(R.id.fifty);
average=view.findViewById(R.id.five_hundred);
maximum=view.findViewById(R.id.ten_thousand);
rl=view.findViewById(R.id.donater);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.fifty:
google_amount=50;
break;
case R.id.five_hundred:
google_amount=500;
break;
case R.id.ten_thousand:
google_amount=10000;
break;
}
}
});
rl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (google_amount>0) {
//googlepay
} else {
Toast.makeText(getContext(),"Please choose an amount", Toast.LENGTH_SHORT).show();
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Til*_*ill 30
从 Android Gradle Plugin 8.0.0 开始,默认情况下,您的资源(例如R.id. ...)不再声明final(即常量表达式)以优化构建速度,这是在 switch 语句中使用的先决条件:
https://developer.android。 com/build/optimize-your-build#use-non-constant-r-classes
如果您想保留旧的行为,可以在gradle.properties文件中添加以下行:
android.nonFinalResIds=false
Run Code Online (Sandbox Code Playgroud)
如果您想通过将其转换为 if/else 语句来修复它,Android Studio 将帮助您
Ctrl+1或
Alt+Enter
关于switch关键字。
小智 12
把这条线
android.nonFinalResIds=false
Run Code Online (Sandbox Code Playgroud)
在此文件中并同步
gradle.properties
Run Code Online (Sandbox Code Playgroud)
这对我有用
小智 3
将 switch 语句替换为 if 条件,如下所示
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.fifty) {
google_amount = 50;
} else if (checkedId == R.id.five_hundred) {
google_amount = 500;
} else if (checkedId == R.id.ten_thousand) {
google_amount = 10000;
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果遇到“需要常量表达式”错误,请确保 switch 语句中使用的表达式确实是常量表达式。如果需要计算非常量表达式,您可以考虑使用 if-else 语句。
| 归档时间: |
|
| 查看次数: |
10582 次 |
| 最近记录: |