我开始学习android,我的第一个练习是计算器。在做适当的计算器之前,我计划创建一个非常基本的应用程序,用户只需通过EditText输入2个数字,用按钮选择算术运算,并在按下“igual”按钮时在TextView中获得结果。
我的想法是声明2个字符串(sinput1
在我开始编写操作的工作方式之前,所有布局看起来都运行良好,但是每次我运行应用程序(使用手机或模拟器)时,当我按EditText输入数字时,它都会崩溃。我会把我的代码放在这里,也许我的错误在别处。
我认为改变onClick void上的开关工作方式可以解决这个问题,部分原因是因为我以前有一系列的if,应用程序甚至在加载布局之前就崩溃了。但现在我卡在了这一点上。
package com.example.caye.colores;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button mas;
Button menos;
Button por;
Button div;
Button igual;
EditText num1;
EditText num2;
TextView letrero1;
TextView letrero2;
TextView resultado;
int input1;
int input2;
String sinput1;
String sinput2;
int operacion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mas = (Button)this.findViewById(R.id.mas);
mas.setOnClickListener(this);
mas.setText("+");
menos = (Button)this.findViewById(R.id.menos);
menos.setOnClickListener(this);
menos.setText("-");
por = (Button)this.findViewById(R.id.por);
por.setOnClickListener(this);
por.setText("*");
div = (Button)this.findViewById(R.id.div);
div.setOnClickListener(this);
div.setText("/");
igual = (Button)this.findViewById(R.id.igual);
igual.setOnClickListener(this);
igual.setText("=");
num1 = (EditText)this.findViewById(R.id.num1);
num1.setOnClickListener(this);
num2 = (EditText)this.findViewById(R.id.num2);
num2.setOnClickListener(this);
letrero1 = (TextView)this.findViewById(R.id.letrero1);
letrero1.setText("Número 1");
letrero2 = (TextView)this.findViewById(R.id.letrero2);
letrero2.setText("Número 2");
resultado = (TextView)this.findViewById(R.id.resultado);
resultado.setText("");
}
public void onClick(View view){
switch (view.getId()){
case R.id.mas:
operacion = 1;
break;
case R.id.menos:
operacion = 2;
break;
case R.id.por:
operacion = 3;
break;
case R.id.div:
operacion = 4;
break;
case R.id.num1:
sinput1 = num1.getText().toString();
input1 = Integer.parseInt(sinput1);
break;
case R.id.num2:
sinput2 = num2.getText().toString();
input2 = Integer.parseInt(sinput2);
break;
case R.id.resultado:
switch (operacion){
case 1:
resultado.setText(input1 + input2);
break;
case 2:
resultado.setText(input1 - input2);
break;
case 3:
resultado.setText(input1 * input2);
break;
case 4:
resultado.setText(input1 / input2);
break;
default:
resultado.setText("Elige una operación");
break;
}
break;
}
}
}
这里。
03-15 09:41:24.234 22041-22041/? D/dalvikvm: Late-enabling CheckJNI
03-15 09:41:24.334 22041-22041/com.example.caye.colores D/HyLog: I : /data/font/config/dfactpre.dat, No such file or directory (2)
03-15 09:41:24.338 22041-22041/com.example.caye.colores D/asset: AssetManager-->addDefaultAssets CIP path not exsit!
03-15 09:41:24.502 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
03-15 09:41:24.502 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
03-15 09:41:24.502 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve interface method 15038: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
03-15 09:41:24.502 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
03-15 09:41:24.503 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
03-15 09:41:24.503 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve interface method 15042: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
03-15 09:41:24.503 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
03-15 09:41:24.580 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
03-15 09:41:24.580 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve virtual method 396: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
03-15 09:41:24.580 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
03-15 09:41:24.581 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
03-15 09:41:24.581 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve virtual method 418: Landroid/content/res/TypedArray;.getType (I)I
03-15 09:41:24.581 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
03-15 09:41:24.690 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.690 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.838 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x619ca788) (w:544, h:960, f:1)
03-15 09:41:24.844 22041-22041/com.example.caye.colores D/OpenGLRenderer: Enabling debug mode 0
03-15 09:41:24.846 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x61bf9318) (w:1216, h:832, f:1)
03-15 09:41:24.857 22041-22041/com.example.caye.colores D/OpenGLRenderer: setViewport 540x960 <0x619ca8c0>
03-15 09:41:24.888 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.888 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.890 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.890 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.946 22041-22041/com.example.caye.colores D/cliptray_Editor: setInputTypeforClipTray(): 0
03-15 09:41:24.960 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.960 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.960 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.961 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:25.008 22041-22041/com.example.caye.colores D/cliptray_Editor: setInputTypeforClipTray(): 0
03-15 09:41:25.446 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x62130980) (w:544, h:960, f:1)
03-15 09:41:25.957 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x6201a318) (w:544, h:960, f:1)
03-15 09:41:28.168 22041-22041/com.example.caye.colores I/ViewRootImpl: ViewRoot's Touch Event : ACTION_DOWN
03-15 09:41:28.316 22041-22041/com.example.caye.colores I/ViewRootImpl: ViewRoot's Touch Event : ACTION_UP
03-15 09:41:28.341 22041-22041/com.example.caye.colores V/Provider/Settings: get setting for user 0 by user 0 so skipping cache
03-15 09:41:28.342 22041-22041/com.example.caye.colores V/Provider/Settings: invalidate [system]: current 32 != cached 0
03-15 09:41:28.347 22041-22041/com.example.caye.colores D/AndroidRuntime: Shutting down VM
03-15 09:41:28.347 22041-22041/com.example.caye.colores W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4249be48)
03-15 09:41:28.355 22041-22041/com.example.caye.colores E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.caye.colores, PID: 22041
java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:137)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:331)
at com.example.caye.colores.MainActivity.onClick(MainActivity.java:81)
at android.view.View.performClick(View.java:4461)
at android.view.View$PerformClick.run(View.java:18523)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
03-15 09:41:30.416 22041-22041/com.example.caye.colores I/Process: Sending signal. PID: 22041 SIG: 9
我们不需要为EditTexts使用setOnClickListener尝试此代码
package com.example.caye.colores;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button mas;
Button menos;
Button por;
Button div;
Button igual;
EditText num1;
EditText num2;
TextView letrero1;
TextView letrero2;
TextView resultado;
int input1;
int input2;
String sinput1;
String sinput2;
int operacion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mas = (Button)this.findViewById(R.id.mas);
mas.setOnClickListener(this);
mas.setText("+");
menos = (Button)this.findViewById(R.id.menos);
menos.setOnClickListener(this);
menos.setText("-");
por = (Button)this.findViewById(R.id.por);
por.setOnClickListener(this);
por.setText("*");
div = (Button)this.findViewById(R.id.div);
div.setOnClickListener(this);
div.setText("/");
igual = (Button)this.findViewById(R.id.igual);
igual.setOnClickListener(this);
igual.setText("=");
num1 = (EditText)this.findViewById(R.id.num1);
//num1.setOnClickListener(this);
num2 = (EditText)this.findViewById(R.id.num2);
//num2.setOnClickListener(this);
letrero1 = (TextView)this.findViewById(R.id.letrero1);
letrero1.setText("Número 1");
letrero2 = (TextView)this.findViewById(R.id.letrero2);
letrero2.setText("Número 2");
resultado = (TextView)this.findViewById(R.id.resultado);
resultado.setText("");
}
public void onClick(View view){
switch (view.getId()){
case R.id.mas:
operacion = 1;
break;
case R.id.menos:
operacion = 2;
break;
case R.id.por:
operacion = 3;
break;
case R.id.div:
operacion = 4;
break;
/*
case R.id.num1:
sinput1 = num1.getText().toString();
input1 = Integer.parseInt(sinput1);
break;
case R.id.num2:
sinput2 = num2.getText().toString();
input2 = Integer.parseInt(sinput2);
break;
*/
case R.id.resultado:
sinput1 = num1.getText().toString();
sinput2 = num2.getText().toString();
if(!TextUtils.isEmpty(sinput1) && TextUtils.isDigitsOnly(sinput1)
{
input1 = Integer.parseInt(sinput1);
}
if(!TextUtils.isEmpty(sinput2) && TextUtils.isDigitsOnly(sinput2)
{
input2 = Integer.parseInt(sinput2);
}
if(input1 != null && input2 != null) {
switch (operacion){
case 1:
resultado.setText(input1 + input2);
break;
case 2:
resultado.setText(input1 - input2);
break;
case 3:
resultado.setText(input1 * input2);
break;
case 4:
resultado.setText(input1 / input2);
break;
default:
resultado.setText("Elige una operación");
break;
} else {
resultado.setText("Check the inputs");
}
}
break;
}
}
}
我认为在您选择编辑文本num1/num2时,编辑文本内容为空。最好的方法是在点击按钮时解析编辑文本输入。还要使用isDigitsOnly() API检查输入是否为数字。
首先,您需要提供崩溃的堆栈跟踪。
其次,你的错误极有可能是来自于你的< code > integer . parse int(sinput 1);字符串到整数的转换。
你确定那里有整数吗?您可能正在尝试将“”转换为整数。
检查 EditText 是否为空,以及它是否包含数字。
if(!TextUtils.isEmpty(sinput1) && TextUtils.isDigitsOnly(sinput1)) {
input1 = Integer.parseInt(sinput1);
}
我有一个很短的倒计时(最少3秒,最多10秒),用来控制屏幕上显示新的数学问题。每隔1秒,倒计时应该检查用户是否在编辑文本中输入了正确答案。以下是我的代码: 我遇到的问题是,这个倒计时程序一创建,应用程序就会崩溃。出于某种原因,似乎使应用程序崩溃,我认为这是因为倒计时无法在1秒内完成所有这些。我尝试将其拆分为两种方法,如下所示: 然后像这样调用onTick()中的givenAnswerToInt()
我想在我的java程序中添加更多的命令,我正在用unix编写,但是在传递参数时遇到了问题。我只是在unix中输入命令之前,将文本文件作为程序参数,工作正常,但想要求输入。试着自己解决,但对java来说有点陌生 我有, 效果很好,然后试了这个,失败了 所以我犯了这些错误 CPU. java: 24:错误:不兼容的类型int计数=scanner.next线();^必需:int找到:字符串CPU. ja
当我的应用程序安装在我的相对较新的运行奥利奥8.0的华为上时,我的应用程序能够顺利地启动和运行。该应用程序在运行Lollipop的Nexus模拟器上也运行良好。然而,在我的另一部运行KitKat4.4的手机上,应用程序在启动时就崩溃了。 我认为问题是在添加默认NavigationDrawerActivity时发生的。 java.lang.RuntimeException:无法启动activity
问题内容: 我有一个将存储Number对象的列表。该列表将通过分析字符串列表来填充,其中每个字符串都可以表示Number的任何子类。 如何将字符串解析为通用数字,而不是特定的整数或浮点数? 问题答案: 数字不能实例化,因为它是抽象类。我建议传入数字,但是如果您设置为字符串,则可以使用任何子类来解析它们, 要么 @请参阅NumberFormat
问题内容: 因此,在Java中,您知道如何声明这样的整数: 我认为您应该能够逆转这一过程。我有这个代码: 其中primary是自定义Color类的对象。它的构造函数使用Integer表示不透明度(0-99)和十六进制String(例如)。 这是方法: 当我调用此方法时,它给出了以下信息: 我不明白发生了什么事。有人可以解释一下吗? 问题答案: 请问有帮助吗? 表示您应该将字符串解释为基于16的(十
我正试图在Android Studio中制作一个可以“记住”我的成绩和科目的应用程序。目前,我正在开发一个允许我制作主题的系统。 编译后,没有错误,我打开应用程序,应用程序崩溃,我收到一个错误:“尝试在空对象引用上调用虚拟方法” 我认为字符串数组与此有关。 这是我的代码: 提前谢谢!