0

我刚刚开始在 Android 中编码。我尝试创建一个可以计算两个数字之和的应用程序。即使在这个简单的程序中也会出错。应用程序显示:不幸的是,在模拟器中运行时 application_name 已停止。

package com.example.first;

import org.w3c.dom.Text;


import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements android.view.View.OnClickListener
{
    Button buttonSum,buttonSumOne;
    EditText textOne,textTwo;
    TextView textSum;
    float a,b,sum;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonSum=(Button)findViewById(R.id.button1);
        buttonSum.setOnClickListener(this);
        textOne=(EditText)findViewById(R.id.editText1);
        textTwo=(EditText)findViewById(R.id.editText2);
        textSum=(TextView)findViewById(R.id.textSum);
        a=Float.parseFloat(textOne.getText().toString());
        a=Float.valueOf(textOne.getText().toString());
        b=Float.parseFloat(textTwo.getText().toString());
        sum=a+b;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(R.id.button1==v.getId())         
            textSum.setText(String.valueOf(sum));

    }


}

日志猫:

03-16 07:08:16.297: W/Trace(791): Unexpected value from nativeGetEnabledTags: 0
03-16 07:08:16.316: W/Trace(791): Unexpected value from nativeGetEnabledTags: 0
03-16 07:08:18.496: D/AndroidRuntime(791): Shutting down VM
03-16 07:08:18.496: W/dalvikvm(791): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
03-16 07:08:18.536: E/AndroidRuntime(791): FATAL EXCEPTION: main
03-16 07:08:18.536: E/AndroidRuntime(791): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.first/com.example.first.MainActivity}: java.lang.NumberFormatException: Invalid float: ""
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.os.Looper.loop(Looper.java:137)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.ActivityThread.main(ActivityThread.java:5039)
03-16 07:08:18.536: E/AndroidRuntime(791):  at java.lang.reflect.Method.invokeNative(Native Method)
03-16 07:08:18.536: E/AndroidRuntime(791):  at java.lang.reflect.Method.invoke(Method.java:511)
03-16 07:08:18.536: E/AndroidRuntime(791):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-16 07:08:18.536: E/AndroidRuntime(791):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-16 07:08:18.536: E/AndroidRuntime(791):  at dalvik.system.NativeStart.main(Native Method)
03-16 07:08:18.536: E/AndroidRuntime(791): Caused by: java.lang.NumberFormatException: Invalid float: ""
03-16 07:08:18.536: E/AndroidRuntime(791):  at java.lang.StringToReal.invalidReal(StringToReal.java:63)
03-16 07:08:18.536: E/AndroidRuntime(791):  at java.lang.StringToReal.parseFloat(StringToReal.java:289)
03-16 07:08:18.536: E/AndroidRuntime(791):  at java.lang.Float.parseFloat(Float.java:300)
03-16 07:08:18.536: E/AndroidRuntime(791):  at com.example.first.MainActivity.onCreate(MainActivity.java:33)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.Activity.performCreate(Activity.java:5104)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-16 07:08:18.536: E/AndroidRuntime(791):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
03-16 07:08:18.536: E/AndroidRuntime(791):  ... 11 more
03-16 07:08:52.026: I/Process(791): Sending signal. PID: 791 SIG: 9
4

3 回答 3

1

您正在收到异常,因为您正在从 on create 方法中的编辑文本中获取值,并且当时两个编辑文本都是空的..尝试在 onClick 方法中获取值..

尝试这个:

 public class MainActivity extends Activity implements android.view.View.OnClickListener
    {
        Button buttonSum,buttonSumOne;
        EditText textOne,textTwo;
        TextView textSum;
        float a,b,sum;
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            buttonSum=(Button)findViewById(R.id.button1);
            buttonSum.setOnClickListener(this);
            textOne=(EditText)findViewById(R.id.editText1);
            textTwo=(EditText)findViewById(R.id.editText2);
            textSum=(TextView)findViewById(R.id.textSum);


        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(R.id.button1==v.getId())    {    
            a=Float.parseFloat(textOne.getText().toString());          
            b=Float.parseFloat(textTwo.getText().toString());
               sum=a+b; 
               textSum.setText(String.valueOf(""+sum));
    }
        }


    }
于 2013-03-16T07:16:46.937 回答
0

尝试这个

a= Float.valueOf(yourEdittext.getText().toString());

或者

String s = yourEdittext.getText().toString();
Float f= Float.parseFloat(s);

并将值添加到您的字符串中,它不会将 nil 值转换为浮点数。

a="20.0"
b="22.0"

像这样的东西。

第一次您的编辑文本不包含该值。因此它不会找到任何要转换的东西。
你的错误解释了一切。

Caused by: java.lang.NumberFormatException: Invalid float: ""

为您的编辑文本提供价值。

yourEditText.setText("22.0");
于 2013-03-16T07:24:19.777 回答
0

你得到的错误是:

Caused by: java.lang.NumberFormatException: Invalid float: ""

从这行代码:

  at com.example.first.MainActivity.onCreate(MainActivity.java:33)

其中有以下代码:

    a=Float.parseFloat(textOne.getText().toString());

您的错误是您试图访问方法textOne中文本字段的内容onCreate()。当要创建活动时调用此方法,因此用户还没有机会与之交互,因此该文本字段的内容为空。

您应该移动该行代码以及接下来的几行获取textTwo值的代码,将字符串解析为浮点数并对onClick()方法进行计算。当用户有机会在文本字段中输入一些实际值之后,该方法将在用户单击按钮时执行。

请注意,您仍然必须从解析中捕获异常,因为用户可能会在这些字段中键入一些垃圾而不是实际数字。最简单的方法是try { .. } catch (Exception ex) {}绕过解析行,这基本上会吞下任何异常。当然,这仍然会运行虚假计算并向用户显示一些不正确的答案。更好的用户体验是在发生这种情况时向用户显示一些不错的错误消息,解释他们做错了什么。不过,我会把它作为练习留给你。

于 2013-03-16T07:28:12.310 回答