3

コードに何が欠けていますか?

ここで問題があります。ここに2つの編集テキストがあります。1 つは金額用、もう 1 つはパスワード用です。私のアプリは、編集テキストに NONE を入力した場合を除いて、魔法のように機能し、IT がクラッシュします (残念ながら停止します)。アクティビティで不足しているコードはありますか? 助けてください。これが私のコードです。

public class MainActivity extends Activity {
    Button REDIRECT;
    private EditText txtbox1,txtbox2;

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

        REDIRECT = (Button) findViewById(R.id.button1);
        txtbox1= (EditText) findViewById(R.id.editText1);  
        txtbox2= (EditText) findViewById(R.id.editText2);

        REDIRECT.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                int Amount = Integer.parseInt(txtbox1.getText().toString());
                String Password = txtbox2.getText().toString();


                if(Amount<=50&&Amount>=1 & Password.equals("TUBOL"))
                {

                final Intent i = new Intent(MainActivity.this, Redirect.class);               
                startActivity(i);
                }
                else 
                {
                    Toast.makeText(MainActivity.this, "INVALID", Toast.LENGTH_LONG).show();
                }
            }
        });

    }

これが私のlogcatです:

09-15 01:46:34.641: E/AndroidRuntime(30540): FATAL EXCEPTION: main
09-15 01:46:34.641: E/AndroidRuntime(30540): java.lang.NumberFormatException: Invalid int: ""
09-15 01:46:34.641: E/AndroidRuntime(30540):    at java.lang.Integer.invalidInt(Integer.java:138)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at java.lang.Integer.parseInt(Integer.java:359)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at java.lang.Integer.parseInt(Integer.java:332)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at com.example.pwordlockdown.MainActivity$1.onClick(MainActivity.java:29)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at android.view.View.performClick(View.java:3549)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at android.view.View$PerformClick.run(View.java:14400)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at android.os.Handler.handleCallback(Handler.java:605)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at android.os.Looper.loop(Looper.java:154)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at android.app.ActivityThread.main(ActivityThread.java:4945)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at java.lang.reflect.Method.invokeNative(Native Method)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at java.lang.reflect.Method.invoke(Method.java:511)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-15 01:46:34.641: E/AndroidRuntime(30540):    at dalvik.system.NativeStart.main(Native Method)
4

7 に答える 7

6

それはキャッチNumberFormatExpectionされていませんInteger.parseInt(txtbox1.getText().toString())

txtbox1このメソッドが呼び出されたときは空なので、Integer.parseInt("")which をスローする呼び出しを行っていますNumberFormatExpection

于 2013-09-14T17:41:58.973 に答える
3

String を入力し、それを Int に解析しようとしています

int Amount = 0;

try
{
    Amount = Integer.parseInt(txtbox1.getText().toString());
}
catch(NumberFormatException e)
{
    // Sep 14, 2013 11:26:26 PM
    Log.e("Exception","DownloadFileTask.onPostExecute.NumberFormatException"+String.valueOf(e.getMessage()));
    e.printStackTrace();
}

このスローエラー

このような数値のみのEditTextセットプロパティに使用する必要がありますinputType

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal" >
</EditText>
于 2013-09-14T17:41:35.530 に答える
1

問題は、 に何も入力されていない場合EditText、 に解析するとIntegerエラーが発生することです (解析する数値がないため)。

your から入力を取得してEditTextに解析する場合は、次のように構造をInteger追加するだけです。if

if (!(editText.getText().toString().equals(""))) // if edit text is NOT blank
{
    int num = Integer.parseInt(editText.getText().toString());
}
于 2013-09-14T18:03:09.587 に答える
0

スローされた可能性のあるエラーを解析してキャッチし、txtBox1..getText().toString()それをエラー トーストにルーティングしてみてはどうでしょうか。

于 2013-09-14T17:49:06.917 に答える
0

if ステートメントを実行して、textBoxが空かどうかを確認する必要があります...

public class MainActivity extends Activity {
Button REDIRECT;
private EditText txtbox1,txtbox2;

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

    REDIRECT = (Button) findViewById(R.id.button1);
    txtbox1= (EditText) findViewById(R.id.editText1);  
    txtbox2= (EditText) findViewById(R.id.editText2);

    REDIRECT.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
        if(!txtbox1.getText().toString().equals("")){

            int Amount = Integer.parseInt(txtbox1.getText().toString());
            String Password = txtbox2.getText().toString();


            if(Amount<=50&&Amount>=1 & Password.equals("TUBOL"))
            {

            final Intent i = new Intent(MainActivity.this, Redirect.class);               
            startActivity(i);
            }
            else 
            {
                Toast.makeText(MainActivity.this, "INVALID", Toast.LENGTH_LONG).show();
            }
            }else{
                Toast.makeText(MainActivity.this, "Amount Box empty...", Toast.LENGTH_LONG).show();
            }
        }
    });

}

それが役に立てば幸い...

于 2013-09-14T17:50:45.523 に答える
-1

私は自分の解決策を見つけます。私は設定android:text="0" し、私の問題はなくなりました。:))

于 2013-09-14T17:55:28.693 に答える