1

EditText を使用して、1) inpval2 と 2) rate の 2 つの値を受け入れようとしています。私は Integer クラスと parseInt() メソッドを一緒に使用しました

android:digits="0123456789." android:inputType="number" 受け入れられた値を整数として変換するための属性。

コードは次のとおりです。

package kk.currency;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class CurrencyActivity extends Activity {
/** Called when the activity is first created. */

EditText inpval1;
EditText inpval2;
EditText rate;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public void btnclick(View view)  {

        inpval1 = (EditText)findViewById(R.id.away);
        int v1 = Integer.parseInt(inpval1.getText().toString());

        inpval2 = (EditText)findViewById(R.id.home);
        int v2 = Integer.parseInt(inpval2.getText().toString());

        rate = (EditText)findViewById(R.id.rate);
        int r = Integer.parseInt(rate.getText().toString());  

        v1 = v2 * r;

    }

}

問題は、ボタンをクリックすると (onClick = "btnclick")、アプリが動作しなくなることです。

外すと

int v1 = Integer.parseInt(inpval1.getText().toString());
int v2 = Integer.parseInt(inpval2.getText().toString());
int r = Integer.parseInt(rate.getText().toString());

ボタンをクリックしてもアプリがクラッシュしません。

logcat エラーは次のとおりです。

> 05-17 02:59:04.676: D/gralloc_goldfish(869): Emulator without GPU emulation detected.
05-17 02:59:13.907: D/AndroidRuntime(869): Shutting down VM
05-17 02:59:13.907: W/dalvikvm(869): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-17 02:59:13.946: E/AndroidRuntime(869): FATAL EXCEPTION: main
05-17 02:59:13.946: E/AndroidRuntime(869): java.lang.IllegalStateException: Could not execute method of the activity
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View$1.onClick(View.java:3044)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View.performClick(View.java:3511)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View$PerformClick.run(View.java:14105)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.os.Handler.handleCallback(Handler.java:605)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.os.Looper.loop(Looper.java:137)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.app.ActivityThread.main(ActivityThread.java:4424)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invokeNative(Native Method)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invoke(Method.java:511)
05-17 02:59:13.946: E/AndroidRuntime(869):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-17 02:59:13.946: E/AndroidRuntime(869):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-17 02:59:13.946: E/AndroidRuntime(869):  at dalvik.system.NativeStart.main(Native Method)
05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.reflect.InvocationTargetException
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invokeNative(Native Method)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invoke(Method.java:511)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View$1.onClick(View.java:3039)
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 11 more
05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.NumberFormatException: Invalid int: ""
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.invalidInt(Integer.java:138)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:359)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:332)
05-17 02:59:13.946: E/AndroidRuntime(869):  at kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24)
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 14 more

誰でもこれで私を助けてもらえますか? 私は初心者で、解決策を見つけるためにこれにかなりの時間を費やしました。

4

3 に答える 3

3

問題は次のとおりです。

05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.NumberFormatException: Invalid int: "" 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.invalidInt(Integer.java:138) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:359) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:332) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24) 
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 14 more 

この行at kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24)は、CurrencyActivity.java ファイルの 24 行目で、空の文字列 "" である無効な int が原因で NumberFormatException をスローしていることを示しています。これは、フィールドの 1 つを空にしてクリックすると、"" を整数として解析しようとし、失敗すると例外がスローされることを意味します。

于 2012-05-16T21:38:20.843 に答える
2

もっと役立つように、logcat エラーを投稿してください。

クラッシュの原因となる可能性のある 2 つのことがあります。

1.) 入力を整数として解析できません (範囲外の値? 解析されるテキスト? 10 進数値?)

また

2.) findViewById 呼び出しは null を返し、呼び出すinpval1.getText().toString()と NullPointerException がスローされます

于 2012-05-16T21:28:16.550 に答える
1
String s1 = inpval1.getText().toString();
String s2 = inpval2.getText().toString();
String s3 = rate.getText().toString();

int v1=Integer.parseInt(s1);
int v2=Integer.parseInt(s2);
int r = Integer.parseInt(s3);
于 2012-05-16T21:54:40.897 に答える