0

Androidでコーディングを始めたところです。2つの数値の合計を計算するアプリを作成しようとしました。この単純なプログラムでもエラーが発生します。アプリケーションの表示:残念ながら、エミュレータで実行しているときに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));

    }


}

Logcat:

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

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

発生するエラーは次のとおりです。

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、文字列を解析してfloatし、onClick()メソッドに対して計算を実行する必要があります。このメソッドは、ユーザーがテキストフィールドに実際の値を入力した後、ボタンをクリックしたときに実行されます。

ユーザーがこれらのフィールドに実際の数値の代わりにガベージを入力する可能性があるため、解析からの例外をキャッチする必要があることに注意してください。最も簡単な方法はtry { .. } catch (Exception ex) {}、解析ラインを配置することです。これにより、基本的に例外がすべて飲み込まれます。もちろん、それでも偽の計算が実行され、ユーザーに誤った答えが表示されます。より良いUXは、これが発生したときにユーザーにいくつかの素晴らしいエラーメッセージを表示し、ユーザーが何を間違えたかを説明することです。ただし、これは演習として残しておきます。

于 2013-03-16T07:28:12.310 に答える
0

これを試して

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

また

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

文字列に値を追加しても、nil値はfloatに変換されません。

a="20.0"
b="22.0"

このようなもの。

初めて編集テキストに値が含まれていないため、変換するものが見つかりません。
あなたのエラーはすべてを説明します。

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

エディットテキストに価値を提供します。

yourEditText.setText("22.0");
于 2013-03-16T07:24:19.777 に答える