有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java一致性OnClickListener问题

运行myMaintenanceActvity时,应用程序不断崩溃。LogCat指向代码第60行的NullPointerException。然而,由于从类似的活动中回收了代码,我似乎不明白为什么这会成为一个问题

我会很感激在这个问题上向正确的方向点头,因为它已经困扰了我一天多了。我认为这是一个相对简单的修复方法,但唉,我还没有找到解决方案

我已经检查了其他关于这类LogCat错误的SO线程,但找不到适合我的解决方案

LogCat

03-01 11:00:03.619 5705-5705/? E/UncaughtException: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.***.myapplication/com.example.***.myapplication.MaintenanceActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.widget.Button.setOnClickListener(安卓.view.View$OnClickListener)' on a null object reference
                                                    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                                                    at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                                                    at 安卓.app.ActivityThread.-wrap11(Unknown Source:0)
                                                    at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                                                    at 安卓.os.Handler.dispatchMessage(Handler.java:106)
                                                    at 安卓.os.Looper.loop(Looper.java:164)
                                                    at 安卓.app.ActivityThread.main(ActivityThread.java:6494)
                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                    at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                                                 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.widget.Button.setOnClickListener(安卓.view.View$OnClickListener)' on a null object reference
                                                    at com.example.***.myapplication.MaintenanceActivity.onCreate(MaintenanceActivity.java:60)
                                                    at 安卓.app.Activity.performCreate(Activity.java:7009)
                                                    at 安卓.app.Activity.performCreate(Activity.java:7000)
                                                    at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                                                    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
                                                    at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
                                                    at 安卓.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                    at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
                                                    at 安卓.os.Handler.dispatchMessage(Handler.java:106) 
                                                    at 安卓.os.Looper.loop(Looper.java:164) 
                                                    at 安卓.app.ActivityThread.main(ActivityThread.java:6494) 
                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                    at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                                                    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

OnClickLister(从第60行开始)

     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maintenance);

    databaseMaintenance = FirebaseDatabase.getInstance().getReference("maintenance");

    editTextTitle = (EditText) findViewById(R.id.editTextTitle);
    editTextDesc = (EditText) findViewById(R.id.editTextDesc);
    buttonSubmit = (Button) findViewById(R.id.buttonSubmit);
    spinnerPrimary = (Spinner) findViewById(R.id.spinnerPrimary);
    spinnerSecondary = (Spinner) findViewById(R.id.spinnerSecondary);
    spinnerProperty = (Spinner) findViewById(R.id.spinnerProperty);

    listViewIssues = (ListView) findViewById(R.id.listViewIssues);

    maintenanceList = new ArrayList<>();

    buttonSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            addMaintenance();
        }
    });

addMaintenance()方法

    private void addMaintenance(){

    String title = editTextTitle.getText().toString().trim();
    String desc = editTextDesc.getText().toString().trim();
    String primary = spinnerPrimary.getSelectedItem().toString();
    String secondary = spinnerSecondary.getSelectedItem().toString();
    String property = spinnerProperty.getSelectedItem().toString();

    if(!TextUtils.isEmpty(title)){

        String id = databaseMaintenance.push().getKey();

        Maintenance maintenance = new Maintenance (id, title, desc, primary, secondary, property);

        databaseMaintenance.child(id).setValue(maintenance);

        Toast.makeText(this, "Maintenance Added", Toast.LENGTH_LONG).show();

    } else {

        Toast.makeText(this, "You must enter a maintenance record", Toast.LENGTH_LONG).show();
    }

}

共 (3) 个答案

  1. # 1 楼答案

    可能您向按钮提供了错误的id

    buttonSubmit=(Button)findViewById(R.id.buttonSubmit);
    

    检查xml文件中按钮的id

  2. # 2 楼答案

    在提供的一些答案的帮助下,Android Studio复制了activity_maintenance.xml文件,在侧栏中制作了v16版本。我只需要删除两个文件,并有一个activity_maintenance.xml文件

    谢谢大家

  3. # 3 楼答案

    检查活动中使用的xml文件,然后检查按钮的id 然后检查你的活动 XML按钮id&;活动中的按钮初始化id应相同