【问题标题】:IllegalStateException with onclick function带有 onclick 功能的 IllegalStateException
【发布时间】:2016-06-15 01:17:12
【问题描述】:

我创建了一个OnbuttonClick 函数并在两个按钮计算器上实现它并重置。 单击重置时重置其值,但单击计算时会生成非法状态异常。 我已经解决了这个论坛上的问题,但无法找到解决方案

package com.example.rajafarid.hc;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class FoodStorage extends MainActivity {
public int sum = 1;
public int  result;
public int wheatlb = 25;
public int wheatkg = 10;

public int beanlb = 5;
public int beankg = 2;

EditText editTextNOP;
EditText editTextNOMS;
EditText editTextWheat;
EditText editTextBeans;
Button   btnCalculate;
Button   btnReset;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_food_storage);
    editTextNOP = (EditText) findViewById(R.id.editTextNOP);
    editTextNOMS = (EditText) findViewById(R.id.editTextNOMS);
    btnCalculate = (Button) findViewById(R.id.btnCalculate);
    btnReset = (Button) findViewById(R.id.btnReset);
}

这里是 OnButtonClick 函数

public void OnButtonClick(View v)
{

    if (v.getId() == R.id.btnCalculate)
    {
        result = sum*wheatlb;
        int result1 = sum*wheatkg;
        editTextWheat.setText(result+"lb or" +wheatkg+"kg");

        int bean = sum*beanlb;
        int bean1=sum*beankg;
        editTextBeans.setText(bean+"lb or"+beankg+"kg");
    }

    else if (v.getId()==R.id.btnReset)
    {
        editTextNOP.setText("");
        editTextNOMS.setText("");
    }
}
}

logcat 文件:

java.lang.IllegalStateException: 无法在 android.view.View.performClick(View.java:5156) 上执行 android.view.View$1.onClick(View.java:4222) 上的活动方法。 view.View$PerformClick.run(View.java:20755) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper .loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os .ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4217) 在 android.view.View.performClick(View.java:5156) 在 android.view.View$PerformClick.run(View.java:20755) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:5832) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 引起:java.lang.NullPointerException:尝试调用虚拟 方法 'void android.widget.EditText.setText(java.lang.CharSequence)' 在空对象引用上 在 com.example.rajafarid.hc.FoodStorage.OnButtonClick(FoodStorage.java:42) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4217) 在 android.view.View.performClick(View.java:5156) 在 android.view.View$PerformClick.run(View.java:20755) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:5832) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

【问题讨论】:

  • editTextWheat =null 很清楚

标签: android


【解决方案1】:

应用程序因 NullPointerException 而崩溃。问题是你没有初始化editTextWheateditTextBeans。您正在尝试在空引用上调用 setText 方法。就像你对其他两个 TextView 所做的那样,在你的 onCreate() 中初始化这些 TextView;

@Override
protected void onCreate(Bundle b){
        editTextWheat = (EditText) findViewById(R.id.id_of_edit_text_wheat);
        editTextBeans = (EditText) findViewById(R.id.id_of_edit_text_beans);
        ........
    }

解决问题

【讨论】:

  • 完成此操作并删除...我是多么愚蠢...问题解决了 thnks :)
  • 如果回答对您有帮助并解决了您的问题,您可以接受
  • 哦...我不知道接受这件事...nw 它说 2 分钟后你可以接受它..所以我会在 2 分钟后接受它...谢谢跨度>
【解决方案2】:

editTextWheat 和 editTextBeans 为 Null,因为当您将 setText() 与它们一起使用时,它们保持为 null

使用 findViewById() 方法分配 editTextWheat 和 editTextBeans

【讨论】:

    【解决方案3】:

    您必须在 onCreate 视图中为 editTextWheat、editTextBeans 创建 findViewById

    editTextWheat = (EditText) findViewById(R.id.your editTextWheat view ID );
    editTextBeans  = (EditText) findViewById(R.id.your editTextBeans view ID );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多