2014-07-04 13 views
3

我正在制作一个android应用程序,并且该应用程序的组件之一被设计为在二进制文件中将数字转换为十进制数。每次运行它都会崩溃。我如何从二进制转换为Java中的十进制(使用android studio)

public void Button0Clicked(View v) 
{ 
     TextView myText = (TextView)findViewById(R.id.textView); 
     if (firstType == true) 
    { 
     myText.setText(""); 
     firstType = false; 
    } 
    myText.setText(myText.getText() + "0"); 

} 
public void Button1Clicked(View v) 
{ 
     TextView myText = (TextView)findViewById(R.id.textView); 
     if (firstType == true) 
     { 
      myText.setText(""); 
      firstType = false; 
     } 
     myText.setText(myText.getText() + "1"); 
} 
public void Conversion(View view) 
{ 
     TextView myText = (TextView)findViewById(R.id.textView); 
     int decimalValue = Integer.parseInt(myText.getText().toString(),2); 
     TextView result = (TextView)findViewById(R.id.textView2); 
     result.setText(decimalValue); 

} 

我已经缩小问题到一些问题与的Integer.parseInt()函数,是我错了执行?

堆栈跟踪

07-04 09:43:17.806 29832-29832/com.example.jay.myapplication2 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.jay.myapplication2, PID: 29832 
    java.lang.IllegalStateException: Could not execute method of the activity 
      at android.view.View$1.onClick(View.java:3823) 
      at android.view.View.performClick(View.java:4438) 
      at android.view.View$PerformClick.run(View.java:18422) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5001) 
      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:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
      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.view.View$1.onClick(View.java:3818) 
            at android.view.View.performClick(View.java:4438) 
            at android.view.View$PerformClick.run(View.java:18422) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5001) 
            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:785) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x271a 
      at android.content.res.Resources.getText(Resources.java:244) 
      at android.widget.TextView.setText(TextView.java:3888) 
      at com.example.jay.myapplication2.MyActivity.Conversion(MyActivity.java:66) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at android.view.View$1.onClick(View.java:3818) 
            at android.view.View.performClick(View.java:4438) 
            at android.view.View$PerformClick.run(View.java:18422) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5001) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
+2

它崩溃时的错误是什么?它抛出异常吗?它是什么? –

+0

在Logcat中,它表示“java.lang.IllegalStateException:无法执行活动的方法” – user3806093

+4

您可以使用logcat添加一个堆栈跟踪到问题中。 –

回答

6

变化

result.setText(decimalValue); // int param 

要:

result.setText(Integer.toString(decimalValue)); // string param 

,它会工作得很好。


功能View.setText()是重载弦乐和参数的整数类型。

当编译器检测到一个整数参数,就像你的情况那样,它试图通过该ID找到一个 字符串资源。

记住 - 除非是资源ID,否则不要将整数值传递给setText()。

+2

我建议使用'Integer.toString(decimalValue)'而不是'“”+ decimalValue';一眼就能看清楚发生了什么。 –

+0

@TedHopp同意! – matiash

+0

我怎么能说不:) :) –

0

您无法将整数传递给TextView的setText方法。将其转换为字符串,然后就可以开始了。

+2

其实,你可以传递一个整数给'setText';不幸的是对于OP,当你这样做时,它被解释为一个字符串资源ID。 –

+0

我明白了。感谢评论@TedHopp –

相关问题