簡體   English   中英

當我在edittext上輸入任何內容時,應用程序崩潰

[英]App crashes when I entered nothing on edittext

代碼中缺少什么?

我這里有問題。 我這里有2個edittext。 一個用於金額,一個用於密碼。 我的應用程序就像一個魅力,除非我在edittexts上輸入NONE,IT CRASHES(不幸的是停止)。 我錯過了活動的任何代碼嗎? 請幫忙。 這是我的代碼。

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)

它是Integer.parseInt(txtbox1.getText().toString())上未被捕獲的NumberFormatExpection Integer.parseInt(txtbox1.getText().toString())

txtbox1此方法時, txtbox1為空,因此您調用的是Integer.parseInt("") ,它會拋出NumberFormatExpection

您正在輸入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>

在將Amount轉換為int之前檢查輸入是否為null,否則將出現NumberFormatException

 REDIRECT.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        String a=txtbox1.getText().toString();
        if(a.equals(" "))
        {

        Toast a1 =Toast.makeText(getApplicationContext(), "Enter the Amount", Toast.LENGTH_LONG);
        a1.show();

        }
        else 
    {

    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();


    }
    }
    });

問題是如果沒有輸入EditText ,那么將其解析為Integer會給你一個錯誤(因為沒有要解析的數字)。

EditText獲取輸入並將其解析為Integer ,只需添加if結構,如下所示:

if (!(editText.getText().toString().equals(""))) // if edit text is NOT blank
{
    int num = Integer.parseInt(editText.getText().toString());
}

你試圖通過嘗試解析txtBox1..getText().toString()並嘗試將其重新路由到錯誤吐司來捕獲可能出現的錯誤怎么樣?

嘿你要做一個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();
            }
        }
    });

}

希望能幫助到你...

我找到了解決方案。 我設置android:text="0" ,我的問題就消失了。 :))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM