货币转换器Android应用程序中的运行时致命错误
Posted
技术标签:
【中文标题】货币转换器Android应用程序中的运行时致命错误【英文标题】:Run time Fatal error in currency converter android app 【发布时间】:2018-02-04 04:07:39 【问题描述】:当我按下按钮时,应用程序崩溃了。每个转换“国家名称”功能都是一个按钮。我会在评论中发布错误。提前致谢。
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void convertIndia(View view) convert(64.7,"Rupees");
public void convertEurope(View view) convert(0.85,"Euros");
public void convertBritish(View view) convert(0.78,"Pounds");
public void convertUae(View view) convert(3.67,"Dhiram");
public void convertCanada(View view) convert(1.26,"Ca Dollors");
public void convertAustralia(View view) convert(1.26,"Aus Dollors");
public void convert(double other,String country)
EditText editText = (EditText) findViewById(R.id.value);
Double usdValue = Double.parseDouble(editText.getText().toString());
Log.i("USDVAL",usdValue.toString());
Log.i("EDITTEXT",editText.toString());
Double finalvalue = usdValue * other;
Toast.makeText(MainActivity.this, String.format("%.2f", finalvalue) + " " + country, Toast.LENGTH_LONG).show();
错误日志
08-26 12:04:46.140 2387-2387/com.fellowwebster.currencyconverter E/androidRuntime: 致命异常: main 进程:com.fellowwebster.currencyconverter,PID:2387 java.lang.IllegalStateException:无法执行 android:onClick 的方法 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 在 android.view.View.performClick(View.java:5637) 在 android.view.View$PerformClick.run(View.java:22429) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 在 android.view.View.performClick(View.java:5637) 在 android.view.View$PerformClick.run(View.java:22429) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.text.Editable android.widget.EditText.getText()' 在 com.fellowwebster.currencyconverter.MainActivity.convert(MainActivity.java:38) 在 com.fellowwebster.currencyconverter.MainActivity.convertIndia(MainActivity.java:18) 在 java.lang.reflect.Method.invoke(本机方法) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 在 android.view.View.performClick(View.java:5637) 在 android.view.View$PerformClick.run(View.java:22429) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Xml
<Button
android:id="@+id/india"
android:layout_
android:layout_
android:layout_alignBottom="@+id/british"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/value"
android:layout_toStartOf="@+id/british"
android:onClick="convertIndia"
android:text="IND_Rupee"
tools:layout_editor_absoluteX="131dp"
tools:layout_editor_absoluteY="70dp" />
【问题讨论】:
E/AndroidRuntime:致命异常:主进程:com.fellowwebster.currencyconverter,PID:2387 java.lang.IllegalStateException:无法在 android.support.v7.app 执行 android:onClick 的方法。 AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 请分享你的xml代码@Dhanasekar 请edit您的问题提供完整的堆栈跟踪。 请edit您的问题更新或提供更多信息。请不要在 cmets 中发布。 好的,新手在这里抱歉。 @MikeM。 【参考方案1】:您应该尝试使用 onClickListener 而不是 android:onClick。 示例:
Button button = (Button) findViewById(R.id.yourButtonId);
button.setOnClickListener(new OnClickListener()
@Override
public void onClick(View view)
callYourMethodHere();
);
把它放在 onCreate 里面就可以了
【讨论】:
这不是问题。如果找不到onClick
方法,则异常消息会有所不同。以上是关于货币转换器Android应用程序中的运行时致命错误的主要内容,如果未能解决你的问题,请参考以下文章