我的应用程序一直崩溃,但没有错误

时间:2015-08-19 10:31:35

标签: java android

我是Android和Java编程的新手,并且由于某些原因(我不能指出)我的应用程序甚至不会打开。它说“不幸的是'app name'已经崩溃了”。它没有编译时错误吗?

这是Logcat:

08-19 04:54:07.024  24170-24170/com.elie.billsplitter E/AndroidRuntime﹕FATAL EXCEPTION: main
Process: com.elie.billsplitter, PID: 24170
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.elie.billsplitter/com.elie.billsplitter.MainActivity}: java.lang.NumberFormatException: Invalid int: ""
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.NumberFormatException: Invalid int: ""
        at java.lang.Integer.invalidInt(Integer.java:138)
        at java.lang.Integer.parseInt(Integer.java:358)
        at java.lang.Integer.parseInt(Integer.java:334)
        at com.elie.billsplitter.MainActivity.<init>(MainActivity.java:11)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1606)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
08-19 04:54:09.781  24170-24177/com.elie.billsplitter W/art﹕ Suspending all threads took: 793.743ms
08-19 04:54:36.935  24170-24170/com.elie.billsplitter I/Process﹕ Sending signal. PID: 24170 SIG: 9

这是Java文件:

public class MainActivity extends Activity {
public int x = Integer.parseInt("");
public int y = Integer.parseInt("");

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

    //Button
    Button btn = (Button) findViewById(R.id.button);


    //EditText
    EditText nop = (EditText) findViewById(R.id.editText);
    EditText cob = (EditText) findViewById(R.id.editText2);

    x = Integer.parseInt(nop.getText().toString());
    y = Integer.parseInt(cob.getText().toString());
    final TextView tv = (TextView) findViewById(R.id.textView);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int z = x / y;
            tv.setText(z);
        }
    });

}
}

4 个答案:

答案 0 :(得分:1)

很可能你正在将一个空字符串解析为整数。

x = Integer.parseInt(nop.getText().toString());
y = Integer.parseInt(cob.getText().toString());

从Edittext中获取文本之前检查它是否为空。你可能正在解析一个空字符串。

你可以这样检查一下:

if(!(nop.toString().trim().equalsIgnoreCase("") && cob.toString().trim().equalsIgnoreCase(""))){
      x = Integer.parseInt(nop.getText().toString());
      y = Integer.parseInt(cob.getText().toString());
}

并且你正在以不正确的方式启动整数:

可能是这些是您获得例外的行。您无法将空字符串解析为整数。 而不是这个:

public int x = Integer.parseInt("");
public int y = Integer.parseInt("");

写下这个:

public int x = 0;
public int y = 0;

public int x = Integer.parseInt("0");
public int y = Integer.parseInt("0");

答案 1 :(得分:0)

在转换为数字之前,您可以检查它是否是数字字符串。对于一些想法,请在stackoverflow上阅读此主题:How to check if a String is numeric in Java

答案 2 :(得分:0)

在代码中的某处,您将无效字符串或空字符串转换为数字,这会导致NumberFormatException

String x = "abc";
int num = Integer.parseInt(x);

我该如何解决?

try
{
    String x = "abc";
    int num = Integer.parseInt(x);
}
catch(NumberFormatException ne)
{
    System.out.println("Invalid Number!");
}

答案 3 :(得分:0)

在您的代码中,替换:

public int x = Integer.parseInt("");
public int y = Integer.parseInt("");

public int x;
public int y;

x和y的默认值为0.您不必添加它。

错误原因: Integer.parseInt()将其中的字符串转换为整数。你试图转换&#34;&#34;到一个整数,甚至不是数字...所以发生了NumberFormatException。