老师,我程序运行就崩溃,看日志是报空指针异常,但看不出来有什么问题

来源:3-2 项目作业

皮卡鲲

2021-12-10 00:35:19

log报红情况:

E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.borrowbooks, PID: 9321

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.borrowbooks/com.example.borrowbooks.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)

        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)

        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)

        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)

        at android.os.Handler.dispatchMessage(Handler.java:107)

        at android.os.Looper.loop(Looper.java:214)

        at android.app.ActivityThread.main(ActivityThread.java:7356)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

        at com.example.borrowbooks.MainActivity.setListeners(MainActivity.java:129)

        at com.example.borrowbooks.MainActivity.onCreate(MainActivity.java:62)

        at android.app.Activity.performCreate(Activity.java:7802)

        at android.app.Activity.performCreate(Activity.java:7791)

        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 

        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 

        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 

        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 

        at android.os.Handler.dispatchMessage(Handler.java:107) 

        at android.os.Looper.loop(Looper.java:214) 

        at android.app.ActivityThread.main(ActivityThread.java:7356) 

        at java.lang.reflect.Method.invoke(Native Method) 

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

I/Process: Sending signal. PID: 9321 SIG: 9

--------------------------------------------------------------------

然后我查看说的对应位置,是在看不出来,请求老师看一下

相关截图:

https://img.mukewang.com/climg/61b22fbc094d929b13760580.jpg

https://img.mukewang.com/climg/61b22fea094b32e814610594.jpg

https://img.mukewang.com/climg/61b22ffc090a532f14830596.jpg

相关代码:

package com.example.borrowbooks;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "Cannot invoke method length() on null object";
    private Readers readers;
    private RadioGroup sexRadioGroup;
    private EditText readersNameEditText;
    private EditText leadingTimeEditText;
    private ImageView displayImageView;
    private CheckBox historyCheckBox, suspenseCheckBox, literatureCheckBox;
    private boolean isHistory;
    private boolean isSuspense;
    private boolean isLiterature;
    private SeekBar yearsSeekBar;
    private Button searchButton;
    private Button nextButton;
    private List<Books> books;
    private List<Books> booksResult;
    private int year;
    private TextView displayYears;
    private int currentBookNum;

    private void findView() {
        sexRadioGroup = findViewById(R.id.radioGroup_Sex);
        readersNameEditText = findViewById(R.id.editText_ReaderName);
        leadingTimeEditText = findViewById(R.id.editView_LeadingTime);
        displayImageView = findViewById(R.id.imageView_Display);
        displayYears = findViewById(R.id.textView_DisplayYears);
        historyCheckBox = findViewById(R.id.checkBox_history);
        suspenseCheckBox = findViewById(R.id.checkBox_Suspense);
        literatureCheckBox = findViewById(R.id.checkBox_Literature);
        yearsSeekBar = findViewById(R.id.seekBar_Years);
        searchButton = findViewById(R.id.search_button);
        nextButton = findViewById(R.id.button_Next);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findView();
        initData();
        setListeners();
    }

    private void initData() {
        books = new ArrayList<>();
        books.add(new Books("人生感悟", 16, R.mipmap.aa, false, false, true));
        books.add(new Books("边城", 18, R.mipmap.bb, false, false, true));
        books.add(new Books("sapir", 25, R.mipmap.cc, false, true, false));
        books.add(new Books("光辉岁月", 30, R.mipmap.dd, true, false, false));
        books.add(new Books("宋词三百首", 13, R.mipmap.ee, false, false, true));
        books.add(new Books("中国古代文学教学纲要", 18, R.mipmap.ff, true, false, true));
        books.add(new Books("无花果", 16, R.mipmap.gg, false, false, true));
        books.add(new Books("古镇记忆", 36, R.mipmap.hh, false, false, true));
        readers = new Readers();
        booksResult = new ArrayList<>();
    }

    private void setListeners() {
        sexRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.radioButton_man:
                        readers.setSex("男");
                        break;
                    case R.id.radioButton_woman:
                        readers.setSex("女");
                        break;
                }
            }
        });
        historyCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                isHistory = isChecked;
            }
        });
        suspenseCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                isSuspense = isChecked;
            }
        });
        literatureCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                isLiterature = isChecked;
            }
        });
        yearsSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                year = seekBar.getProgress();
                Toast.makeText(MainActivity.this, "年龄" + year, Toast.LENGTH_SHORT).show();
                displayYears.setText(year);
            }
        });
        searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                search();
            }
        });
        nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentBookNum++;
            }
        });
    }

    private void search() {
        if (booksResult == null) {
            booksResult = new ArrayList<Books>();
        }
        booksResult.clear();
        currentBookNum = 0;
        for (int i = 0; i < books.size(); i++) {
            Books book = books.get(i);
            if (book != null) {
                if (book.getSuitYear() < year && (book.isHistory() == isHistory || book.isSuspense() == isSuspense || book.isLiterature() == isLiterature)) {
                    booksResult.add(book);
                }
            }
        }
        if (currentBookNum < booksResult.size()) {
            displayImageView.setImageResource(booksResult.get(currentBookNum).getImageView());
        } else {
            displayImageView.setImageResource(R.mipmap.f);
        }
    }
}


写回答

1回答

好帮手慕雪

2021-12-14

同学,你好!空指针异常了,MainActivity.java第129行,调用OnClickListener引起的

https://img.mukewang.com/climg/61b7f7590992f76d09310399.jpg

简单看是这个对象没有初始化,但代码中有调用findView(),那你再跟踪一下,是不是这个id写了。祝:学习愉快


0

0 学习 · 2907 问题

查看课程