代码之家  ›  专栏  ›  技术社区  ›  Logixor

Android If语句失败[重复]

  •  0
  • Logixor  · 技术社区  · 9 年前

    我用这个简单的 if/else 声明以检查 RadioButton 选择并设置 TextView 关于选择。好吧,前两种情况( if rb1.isChecked() if rb2.isChecked() )代码执行正确,只需计算两个数字。然而,当第三种情况出现时 (!rb1.isChecked() && !rb2.isChecked()) 应用程序崩溃。 怎么了?

            if (rb1.isChecked()) {
            int sum = x + y;
            String result = String.valueOf(sum);
            tv3.setText(result);
        } else if (rb2.isChecked()) {
            int rest = x - y;
            String result = String.valueOf(rest);
            tv3.setText(result);
        } else if (!rb1.isChecked() && !rb2.isChecked()){
            tv3.setText("Select an option!");
        }
    

    更新:
    这个 Manifest.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.logixor.advancedcalc">
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    
    </manifest>
    

    这个 MainActivity.java :

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    public EditText et1,et2;
    public TextView tv3;
    public RadioButton rb1,rb2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        et1=(EditText)findViewById(R.id.et1);
        et2=(EditText)findViewById(R.id.et2);
        tv3=(TextView)findViewById(R.id.tv3);
        rb1=(RadioButton)findViewById(R.id.rb1);
        rb2=(RadioButton)findViewById(R.id.rb2);
    }
    
    public void calc(View view) {
        String valA = et1.getText().toString();
        String valB = et2.getText().toString();
        int x = Integer.parseInt(valA);
        int y =Integer.parseInt(valB);
    
        if (rb1.isChecked()) {
            int sum = x + y;
            String result = String.valueOf(sum);
            tv3.setText(result);
        } else if (rb2.isChecked()) {
            int rest = x - y;
            String result = String.valueOf(rest);
            tv3.setText(result);
        }
    
        if (!rb1.isChecked() && !rb2.isChecked()){
            tv3.setText("Select an option!");
        }
    }
    }
    

    这个 activity_main.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.logixor.advancedcalc.MainActivity">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textNumber"
        android:id="@+id/tv2"
        android:layout_marginTop="27dp"
        android:layout_below="@+id/et1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/et2"
        android:layout_below="@+id/tv2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:hint="@string/writeHere" />
    
    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="29dp"
        android:padding="20dp"
        android:layout_below="@+id/et2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/rg1">
    
        <RadioButton
            android:text="@string/sum"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rb1"
            android:layout_weight="1" />
    
        <RadioButton
            android:text="@string/rest"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rb2"
            android:layout_weight="1" />
    
    </RadioGroup>
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textNumber"
        android:layout_marginTop="25dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/tv1" />
    
    <Button
        android:text="@string/calc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:layout_alignBottom="@+id/rg1"
        android:layout_marginBottom="27dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_toRightOf="@+id/rg1"
        android:layout_toEndOf="@+id/rg1"
        android:onClick="calc" />
    
    <TextView
        android:text="@string/result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:id="@+id/tv3"
        android:textSize="24sp"
        android:layout_below="@+id/rg1"
        android:textAlignment="center" />
    
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:layout_marginTop="8dp"
        android:id="@+id/et1"
        android:hint="@string/writeHere"
        android:layout_below="@+id/tv1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    
    </RelativeLayout>
    

    这个 strings.xml :

    <resources>
    <string name="app_name">AdvancedCalc</string>
    <string name="textNumber">Number</string>
    <string name="writeHere">Write number here...</string>
    <string name="result">Result</string>
    <string name="calc">CALCULATE</string>
    <string name="sum">Sum</string>
    <string name="rest">Rest</string>
    </resources>
    

    来自 logcat :

    E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.logixor.advancedcalc, PID: 23911
    java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
    at android.view.View.performClick(View.java:4640)
    at android.view.View$PerformClick.run(View.java:19425)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5593)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:4640) 
    at android.view.View$PerformClick.run(View.java:19425) 
    at android.os.Handler.handleCallback(Handler.java:733) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:146) 
    at android.app.ActivityThread.main(ActivityThread.java:5593) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NumberFormatException: Invalid int: ""
    at java.lang.Integer.invalidInt(Integer.java:137)
    at java.lang.Integer.parseInt(Integer.java:358)
    at java.lang.Integer.parseInt(Integer.java:331)
    at com.logixor.advancedcalc.MainActivity.calc(MainActivity.java:30)
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:4640) 
    at android.view.View$PerformClick.run(View.java:19425) 
    at android.os.Handler.handleCallback(Handler.java:733) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:146) 
    at android.app.ActivityThread.main(ActivityThread.java:5593) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
    at dalvik.system.NativeStart.main(Native Method) 
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Onik    9 年前

    Caused by: java.lang.NumberFormatException: Invalid int: "" 是指 EditText 为空,因此在 Integer.parseInt() 内部 calc() 作用检查它是否为空 TextUtils.isEmpty() TextUtils.isDigitsOnly() .

    编辑

    android:inputType="number" 的xml属性 编辑文本 您将使其仅接受数字。

        2
  •  0
  •   Hamid    9 年前

    1) 使用try catch语句了解错误!
    也许 tv 等于空。
    2) 不需要使用 else if (!rb1.isChecked() && !rb2.isChecked()) 或者,只是使用 else{}

        try{
           if(tv == null)
           {
              Toast.makeText(getBaseContext(),"tv is null", 
                    Toast.LENGTH_SHORT).show();
              return;
           }
        if (rb1.isChecked()) {
                int sum = x + y;
                String result = String.valueOf(sum);
                tv3.setText(result);
            } else if (rb2.isChecked()) {
                int rest = x - y;
                String result = String.valueOf(rest);
                tv3.setText(result);
            } else{
                tv3.setText("Select an option!");
            }
        }
        catch(Exception e)
        {
          Toast.makeText(getBaseContext(),"Err:"+r.toString(), 
                    Toast.LENGTH_SHORT).show();
        }