飞溅后,我添加了addListenerOnButtonClick();在mainactivity.java中,然后应用程序崩溃

时间:2020-11-04 13:02:08

标签: android crash screen splash-screen android-appcompat

mainactivity.java

打包com.example.newsplash;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;导入android.view.View;导入android.widget.Button;导入android.widget.CheckBox;导入android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    CheckBox Chapathi, Dosai, Biriyani, Coffee;
    Button order;`enter code here`
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        addListenerOnButtonClick();

    }



    public void addListenerOnButtonClick() {
        Chapathi = (CheckBox) findViewById(R.id.Chapathi);
        Biriyani = (CheckBox) findViewById(R.id.Biriyani);
        Dosai = (CheckBox) findViewById(R.id.Dosai);
        Coffee = (CheckBox) findViewById(R.id.Coffee);


        order.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick (View view)
            {
                int totalamount = 0;
                StringBuilder result = new StringBuilder();
                result.append("Selected Items:");
                if (Chapathi.isChecked()) {
                    result.append("\nChapathi 10RS");
                    totalamount += 10;

                }
                if (Biriyani.isChecked()) {
                    result.append("\nBiriyani is 100RS");
                    totalamount += 100;
                }
                if (Dosai.isChecked()) {
                    result.append("\nDosai is 10RS");
                    totalamount += 10;

                }
                if (Coffee.isChecked()) {
                    result.append("\n Coffee is 10RS");
                    totalamount += 10;
                }
                result.append(("\nTotal"+totalamount + "RS"));
                Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_LONG).show();
            }


        });

    }

}

logcat 2020-11-05 00:33:48.523 27490-27966 / com.example.newsplash D / mmscene:getHint applicationScene = com.example.newsplash,idx = 0无2020-11 -05 00:33:48.577 27490-27490 / com.example.newsplash I /编舞:跳过了7帧!该应用程序可能在其主线程上做太多工作。 2020-11-05 00:33:51.378 27490-27490 / com.example.newsplash W / ActivityThread:handleWindowVisibility:令牌android.os.BinderProxy@3268ab0没有活动2020-11-05 00:33:51.928 27490-27490 / com.example.newsplash D / AndroidRuntime:关闭VM 2020-11-05 00:33:51.938 27490-27490 / com.example.newsplash E / AndroidRuntime:致命异常:main 流程:com.example.newsplash,PID:27490 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.newsplash / com.example.newsplash.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Button.setOnClickListener(android。 view.View $ OnClickListener))上的空对象引用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3146) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3296) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:114) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:74) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1994) 在android.os.Handler.dispatchMessage(Handler.java:106) 在android.os.Looper.loop(Looper.java:226) 在android.app.ActivityThread.main(ActivityThread.java:7224) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:500) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:913) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)' 在com.example.newsplash.MainActivity.addListenerOnButtonClick(MainActivity.java:36) 在com.example.newsplash.MainActivity.onCreate(MainActivity.java:23) 在android.app.Activity.performCreate(Activity.java:7337) 在android.app.Activity.performCreate(Activity.java:7328) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3126) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3296) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:114) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:74) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1994) 在android.os.Handler.dispatchMessage(Handler.java:106) 在android.os.Looper.loop(Looper.java:226) 在android.app.ActivityThread.main(ActivityThread.java:7224) 在java.lang.reflect.Method.invoke(本机方法)

2 个答案:

答案 0 :(得分:0)

  1. 您的代码

您创建了一个变量Button order,但从未初始化过它。 然后,在一个未初始化的按钮上,您正在调用.setOnClickListener,显然这是无法完成的。

  1. 您的堆栈跟踪:

    java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'

解决方案是将findViewById用于order,并获取实际的按钮参考,之后您可以使用.setOnClickListener

答案 1 :(得分:0)

**是的,现在可以工作了。谢谢 ** 公共类MainActivity扩展了AppCompatActivity {

CheckBox Chapathi, Dosai, Biriyani, Coffee;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addListenerOnButtonClick();
}

public void addListenerOnButtonClick() {
    Chapathi = (CheckBox) findViewById(R.id.Chapathi);
    Biriyani = (CheckBox) findViewById(R.id.Biriyani);
    Dosai = (CheckBox) findViewById(R.id.Dosai);
    Coffee = (CheckBox) findViewById(R.id.Coffee);


    
    button = (Button) findViewById(R.id.order);
    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick (View view)
        {
            int totalamount = 0;
            StringBuilder result = new StringBuilder();
            result.append("Selected Items:");
            if (Chapathi.isChecked()) {
                result.append("\nChapathi 10RS");
                totalamount += 10;

            }
            if (Biriyani.isChecked()) {
                result.append("\nBiriyani is 100RS");
                totalamount += 100;
            }
            if (Dosai.isChecked()) {
                result.append("\nDosai is 10RS");
                totalamount += 10;

            }
            if (Coffee.isChecked()) {
                result.append("\n Coffee is 10RS");
                totalamount += 10;
            }
            result.append(("\nTotal"+totalamount + "RS"));
            Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_LONG).show();
        }


    });

}

}