java - 每次我尝试在我的应用程序中按书时都有一个例外
问题描述
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mylibary, PID: 16960
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mylibary/com.example.mylibary.BookActivity}: 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.mylibary.BookActivity.handleCurrentlyReadingBooks(BookActivity.java:100)
at com.example.mylibary.BookActivity.onCreate(BookActivity.java:42)
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: 16960 SIG: 9
班上
package com.example.mylibary;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class BookActivity extends AppCompatActivity {
public static final String BOOK_ID_KEY = "bookId";
private Button btnAddCurrentlyReading, btnAddWishList, btnAddAllReadyRead, btnAddToFavorites;
private TextView txtBookName, txtLalala, txtAuthor, txtNikita, txtPages, txtPagesNumber,
txtShortDesk, txtLongDesk;
private ImageView imgBook;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);
initViews();
Intent intent = getIntent();
if (null != intent) {
int bookId = intent.getIntExtra(BOOK_ID_KEY, -1);
if (bookId != -1) {
Books incomingBook = Utils.getInstance().getBookById(bookId);
if (null != incomingBook) {
setData(incomingBook);
handleAllReadyRead(incomingBook);
handleCurrentlyReadingBooks(incomingBook);
handleWantToReadBooks(incomingBook);
handleFavoriteBooks(incomingBook);
}
}
}
}
private void handleFavoriteBooks(final Books books){
Utils.getInstance();
ArrayList<Books> FavoriteBooks = Utils.getFavoritesBooks();
boolean existInFavoriteBooks = false;
for (Books b: FavoriteBooks){
if (b.getId() == books.getId()) {
existInFavoriteBooks = true;
break;
}
}
if (existInFavoriteBooks){
btnAddToFavorites.setEnabled(false);
}else{
btnAddToFavorites.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Utils.getInstance().addToFavoritesBooks(books)){
Toast.makeText(BookActivity.this, "book add successfully", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, FavoritesBooksActivity.class);
startActivity(intent);
}else{
Toast.makeText(BookActivity.this, "try again", Toast.LENGTH_SHORT).show();
}
}
});
}
}
private void handleCurrentlyReadingBooks(final Books books){
Utils.getInstance();
ArrayList<Books> CurrentlyReadingBooks = Utils.getCurrentlyReadingBooks();
boolean existInCurrentlyReadingBooks = false;
for (Books b: CurrentlyReadingBooks){
if (b.getId() == books.getId()) {
existInCurrentlyReadingBooks = true;
break;
}
}
if (existInCurrentlyReadingBooks){
btnAddCurrentlyReading.setEnabled(false);
}else{
btnAddCurrentlyReading.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Utils.getInstance().addCurrentlyReadingBooks(books)){
Toast.makeText(BookActivity.this, "book add successfully", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, CurrentlyReadingActivity.class);
startActivity(intent);
}else{
Toast.makeText(BookActivity.this, "try again", Toast.LENGTH_SHORT).show();
}
}
});
}
}
private void handleWantToReadBooks(final Books books){
Utils.getInstance();
ArrayList<Books> WantToReadBooks = Utils.getWantToReadBooks();
boolean existInWantToReadBooks = false;
for (Books b: WantToReadBooks){
if (b.getId() == books.getId()) {
existInWantToReadBooks = true;
break;
}
}
if (existInWantToReadBooks){
btnAddWishList.setEnabled(false);
}else{
btnAddWishList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Utils.getInstance().addWantToReadBooks(books)){
Toast.makeText(BookActivity.this, "book add successfully", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, WantToReadActivity.class);
startActivity(intent);
}else{
Toast.makeText(BookActivity.this, "try again", Toast.LENGTH_SHORT).show();
}
}
});
}
}
private void handleAllReadyRead(final Books books){
Utils.getInstance();
ArrayList<Books> AllReadyReadBooks = Utils.getAllReadyReadBooks();
boolean existInAllReadyReadBooks = false;
for (Books b: AllReadyReadBooks){
if (b.getId() == books.getId()) {
existInAllReadyReadBooks = true;
break;
}
}
if (existInAllReadyReadBooks){
btnAddAllReadyRead.setEnabled(false);
}else{
btnAddAllReadyRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Utils.getInstance().addAllReadyReadBook(books)){
Toast.makeText(BookActivity.this, "book add successfully", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, AllReadyReadBooksActivity.class);
startActivity(intent);
}else{
Toast.makeText(BookActivity.this, "try again", Toast.LENGTH_SHORT).show();
}
}
});
}
}
private void setData(Books books) {
txtLalala.setText(books.getName());
txtNikita.setText(books.getAuthor());
txtPagesNumber.setText(String.valueOf(books.getPages()));
txtShortDesk.setText(books.getShortDesk());
txtLongDesk.setText(books.getLongDesk());
Glide.with(this).asBitmap()
.load(books.getImageUrl())
.into(imgBook);
}
private void initViews() {
btnAddCurrentlyReading = findViewById(R.id.btnCurrentlyReading);
btnAddWishList = findViewById(R.id.btnAddWishList);
btnAddAllReadyRead =findViewById(R.id.btnAddAllReadyRead);
btnAddToFavorites = findViewById(R.id.btnAddToFavorites);
txtBookName =findViewById(R.id.txtBookName);
txtLalala = findViewById(R.id.txtLalala);
txtAuthor = findViewById(R.id.txtAuthor);
txtNikita =findViewById(R.id.txtNikita);
txtPages = findViewById(R.id.txtPages);
txtPagesNumber = findViewById(R.id.txtPagesNumber);
txtShortDesk = findViewById(R.id.txtShortDesk);
txtLongDesk = findViewById(R.id.txtLongDesk);
imgBook = findViewById(R.id.imgBook);
}
我制作了 libary 应用程序,每次我按下我想看到的书时,都会给我这个例外
这里有一些代码
解决方案
findViewById()
- 退货
如果找到具有给定 ID 的视图,否则为 null
这意味着R.id.btnCurrentlyReading
没有找到。
看看你写的对不对。
推荐阅读
- openssl - OpenSSl 在新版本的验证中返回错误的签名,在旧版本中返回 OK
- reactjs - 如何同步使用包含 setState 的函数
- python - 我正在尝试将元素从一个二维数组分配给 python 中的另一个二维数组
- python - 将字符串转换为python中的字符串列表
- postgresql - 将 Airflow Docker 连接到 PostgreSql Docker
- javascript - 如何使用类型声明文件中的 JSDocs 在 .js 文件中导入类类型定义?
- perl - 如何比较代码中的几个二进制字节?
- haskell - 从 Haskell 的列表中返回条件的出现次数
- html - 悬停动画后重置位置
- python - 在python中查找numpy 2d数组使用自定义索引