货币转换器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应用程序中的运行时致命错误的主要内容,如果未能解决你的问题,请参考以下文章

获取 Android 运行时:致命异常

Java货币转换器应用程序中的异常处理

运行c ++程序时vc ++中的致命错误[重复]

重命名应用程序包生成致命错误“执行重构时发生致命错误”

Oracle Wed ADI 致命错误

原生Android应用程序中的SIGSEGV错误