Android “我的简单计算器”;“停止工作”;根据emulator和won';我一点也不开放

Android “我的简单计算器”;“停止工作”;根据emulator和won';我一点也不开放,android,Android,在过去的几天里,我一直在尝试让一个简单的计算器应用程序工作,但我似乎无法缩小问题的范围。我是android开发的新手,所以我的mainActivity代码可能有问题,但我已经做了一些预防措施并尝试过。我试着删除我个人编写的所有代码,并重新执行整个仿真器过程,但应用程序仍然无法打开。我尝试在模拟器上删除应用程序并重新启动,我尝试重建、清理并关闭instant run。我不认为这是安卓工作室的问题,因为我创建了一个新项目并加入了一些XMl元素,它在我的计算机上运行得非常好。我想我的代码有问题 我已经

在过去的几天里,我一直在尝试让一个简单的计算器应用程序工作,但我似乎无法缩小问题的范围。我是android开发的新手,所以我的mainActivity代码可能有问题,但我已经做了一些预防措施并尝试过。我试着删除我个人编写的所有代码,并重新执行整个仿真器过程,但应用程序仍然无法打开。我尝试在模拟器上删除应用程序并重新启动,我尝试重建、清理并关闭instant run。我不认为这是安卓工作室的问题,因为我创建了一个新项目并加入了一些XMl元素,它在我的计算机上运行得非常好。我想我的代码有问题

我已经删除了我编写并运行应用程序的代码,但没有结果。我已经在模拟器上卸载了应用程序,并再次运行了它。我一直在努力重建和清理这个项目。我试过同步渐变。我试着打开instant run。从标题来看,这似乎是同一件事,但事实并非如此

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    buttonAdd = findViewById(R.id.Add_Button);
    buttonSub = findViewById(R.id.Sub_Button);
    buttonDiv = findViewById(R.id.Div_Button);
    buttonMult = findViewById(R.id.Mul_Button);
    mText = findViewById(R.id.Answer);

    //Conversion of textview to double
    UserInput = findViewById(R.id.FirstNumber);
    UserInput2 = findViewById(R.id.SecondNumber);

    userinput = Double.parseDouble(UserInput.getText().toString());
    userinput2 = Double.parseDouble(UserInput2.getText().toString());

    //functions for the operations.
    buttonAdd.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View a){
     mText.setText("Answer = " + Double.toString((userinput+userinput2)));
        }
    });

    buttonSub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
  mText.setText("Answer = " + Double.toString((userinput - userinput2)));
        }
    });

    buttonMult.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
     mText.setText("Answer = " + Double.toString((userinput*userinput2)));
        }
    });

    buttonDiv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
  mText.setText("Answer = " + Double.toString ((userinput / userinput2)));
        }
    });


}
}

我希望运行该程序,但它没有运行。我希望上面的代码足够了,因为我肯定犯了一个明显的错误

日志:


您使用2
TextView
s:
UserInput
UserInput2
获取用户输入
如何<代码>文本视图s不可编辑。您应该使用
EditText
s
因此,当您的应用程序启动时,您可以通过以下几行获得他们的文本:

userinput = Double.parseDouble(UserInput.toString());
userinput2 = Double.parseDouble(UserInput2.toString());
这些
TextView
s是否包含任何文本,如果是,它是否为有效数字?
如果没有,则将抛出错误,因为您试图将文本转换为数字,但无法转换该文本。
但是,即使
TextView
s包含有效的数字,您获取它们文本的方式也是错误的,也应该是通过
getText().toString()

编辑
上面这两行在计算之前将它们复制到所有4个侦听器中。

之后,从您最初放置它们的位置删除它们,因为当您启动应用程序时,
EditText
s为空,如果您尝试将它们转换为某个数字,应用程序将崩溃

您的问题在于:

UserInput = findViewById(R.id.FirstNumber);
userinput = Double.parseDouble(UserInput.toString());
您的
UserInput
变量是
TextView
的一个实例。您正在尝试提取
TextView
的当前文本,但是
toString()
不是正确的方法,它只打印出关于该类的元数据。您可以将其替换为:


Double.parseDouble(UserInput.getText().toString())

我已经弄明白了!这是一个数字异常错误。My.getText()值试图在用户单击任何内容之前获取值。在我的例子中,这些editText值分别设置为“InputFirstNumber”和“InputSecondNumber”。你不能指望从字符串中得到一个整数值!很明显,它把它扔了。在每个onClick中放入这两个.getText()之后,它就被修复了。我感谢你们的帮助!在过去的15分钟里,我学到了很多关于整个调试过程的知识,我很感激。再次感谢

你的老师写了一篇文章,惹出了麻烦

 userinput = Double.parseDouble(UserInput.getText().toString());
    userinput2 = Double.parseDouble(UserInput2.getText().toString());
onCreate()函数中
onCreate()
仅在应用程序首次启动时运行。并且是当前唯一调用getText()的位置。因此,
UserInput
UserInput2
中的值为空。这就是
java.lang.numberformatexception
引发的原因。 进行这些更改,您的应用程序将正常工作

  • onCreate()
    函数中删除这两行代码

    UserInput=findviewbyd(R.id.FirstNumber);
    UserInput2=findviewbyd(R.id.SecondNumber)

  • onCreate
    函数之外创建以下函数

  • 在每个
    OnClickListener
    中调用此函数。像下面这样

  • 我希望你的问题解决了。请在下面的评论中询问我任何问题,如果您有任何疑问

    可能重复“是”,请在Logcat中查找引发的异常。将Logcat张贴在此处。这样我们就可以确定具体的problem@AbdulhakimZeinu我是这个网站的新手,所以我还不能在帖子中嵌入图片。我已包含指向我的logcat错误的链接。这样可以吗?告诉我在第55行找到了哪个代码。谢谢你的回复!不幸的是,它仍然不起作用。我将其更改为EditText并使用了上面的代码,但它仍然没有运行。它仍然没有运行并不意味着什么。你必须学会调试。当应用程序崩溃或甚至无法启动时,会有一个错误日志通知您导致崩溃的错误。我的回答只解决了代码中明显的问题。我已经给出了logCat的链接。我查找了错误代码,但没有得到满意的解决方案。您好,谢谢您的回复。代码仍然没有运行!:(
     userinput = Double.parseDouble(UserInput.getText().toString());
        userinput2 = Double.parseDouble(UserInput2.getText().toString());
    
     public void getInput(){
                    UserInput = findViewById(R.id.FirstNumber);
                    UserInput2 = findViewById(R.id.SecondNumber);
                }
    
    buttonSub.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   getInput();
                   mText.setText("Answer = " + Double.toString((userinput - userinput2)));
                }
            });