3

彼が何度か尋ねられたことは知っていますが、私は見つけたものすべてを運が悪かったので試してきました。まだエラーが発生しています。これが私のコードです。

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:gravity="center"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Write item value."
    android:textColor="@android:color/black"
    android:textSize="25dp" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="202dp"
    android:ems="10"
    android:hint="Value"
    android:inputType="number" >

    <requestFocus />
</EditText>

java

public class PopupValores extends Activity {

    EditText valor1;
    String myEditValue;
    public static int valor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.popupvalores);

        valor1 = (EditText) findViewById (R.id.editText1);
        myEditValue = valor1.getText().toString();
        valor = Integer.parseInt(myEditValue);   <<<<Line 20

    }
}

LogCat

05-08 21:02:10.023: W/dalvikvm(6074): threadid=1: thread exiting with uncaught exception (group=0x40020578)
05-08 21:02:10.039: E/AndroidRuntime(6074): FATAL EXCEPTION: main
05-08 21:02:10.039: E/AndroidRuntime(6074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dc.maker/com.dc.maker.PopupValores}: java.lang.NumberFormatException: unable to parse '' as integer
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.os.Looper.loop(Looper.java:130)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.ActivityThread.main(ActivityThread.java:3687)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at java.lang.reflect.Method.invokeNative(Native Method)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at java.lang.reflect.Method.invoke(Method.java:507)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at dalvik.system.NativeStart.main(Native Method)
05-08 21:02:10.039: E/AndroidRuntime(6074): Caused by: java.lang.NumberFormatException: unable to parse '' as integer
05-08 21:02:10.039: E/AndroidRuntime(6074):     at java.lang.Integer.parseInt(Integer.java:362)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at java.lang.Integer.parseInt(Integer.java:332)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at com.popupclass.PopupValores.onCreate(PopupValores.java:20)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-08 21:02:10.039: E/AndroidRuntime(6074):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
05-08 21:02:10.039: E/AndroidRuntime(6074):     ... 11 more

EditTextからintを取得し、それを他のクラスで使用して、何かの値を判別しようとしています。誰かが私が間違っていることを教えてもらえますか?

ありがとう

4

5 に答える 5

3

例外は次のとおりです。

Java.lang.NumberFormatException: unable to parse '' as integer

そして、それはeditbox1フィールドに値がないからです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.popupvalores);

    valor1 = (EditText) findViewById (R.id.editText1);
    myEditValue = valor1.getText().toString();

    Log.debug("logtag", myEditValue); // Here you can see the output.

    try {
        valor = Integer.parseInt(myEditValue); 
    }
    catch(Exception e) {
        Log.e("logtag", "Exception: " + e.toString());
    }
}
于 2012-05-09T01:12:47.417 に答える
1

アクセスしようとしていますvalor1が、valor1現在は空の文字列です。ユーザーが何かを定義する機会を得た後、値を処理する必要があります。

次のようなボタンを追加してみてください。

(Button) button = (Button) findViewByID(R.id.button1);
button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        String temp = valor1.getText().toString();
        if(temp.isEmpty() == false) {
            valor = Integer.parseInt(temp);
            Log.v("SO", "Valor = " + valor);
        }
    }
}
于 2012-05-09T01:07:40.473 に答える
1

コードは、EditText''からの空の文字列をintとして解析しようとしているため、例外がスローされます。

サンプルコードにも、LinearLayoutの終了タグがありません。

于 2012-05-09T01:12:23.437 に答える
1

正規表現を使用してください...以下:

public class PopupValores extends Activity {

EditText valor1;
String myEditValue;
public static int valor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.popupvalores);

    valor1 = (EditText) findViewById (R.id.editText1);
    myEditValue = valor1.getText().toString();
    valor = Integer.parseInt(myEditValue.replaceAll("[\\D]",""));

}

}

于 2014-05-30T19:15:25.533 に答える
0

上記のコードは間違いなく問題を引き起こします。これは、アクティビティの作成時Integer.parseInt(myEditValue)onCreate()、EditTextがまだテキストで埋められていないため(XML定義にデフォルト値を指定していないため)、次のようになります。空の文字列であり、Integer.parseInt(emptyString)をスローしNumberFormatExceptionます。

これを行う正しい方法は、EditTextの値を解析するコードを、ユーザーイベントに応答する場所、または単に。に移動することですtry...catch Integer.parseInt()

ユーザーの入力を絶対に信用try...catch Integer.parseInt()してはならないため、最も安全な方法は常にです。

于 2012-05-09T01:09:30.293 に答える