java - 在 RecyclerView 中单击 Collection 夹项目时出现问题

标签 java android android-recyclerview

我正在尝试使用 Volley 库/JSON 和 RecyclerView 的基础来创建 rss 新闻推送应用程序,其中每一行包含标题、发布日期、描述和文章链接。

这个应用程序应该允许创建最喜欢的文章(DB)列表。

当我使用占位符信息而不是真实的互联网内容运行应用程序时,一切正常。

但是当我通过互联网连接运行它并单击“Collection 夹”按钮(心形)时,出现以下错误: loaded info from internet error message 下面是相关代码的一部分,其中突出显示了行和调试日志:

public BbsNewsViewHolder(@NonNull View itemView){
    super(itemView);
    titleTextView = itemView.findViewById(R.id.txtTitle);
    pubDateTextView= itemView.findViewById(R.id.txtPubDate);
    descriptionTextView=itemView.findViewById(R.id.txtDescription);
    linkTextView = itemView.findViewById(R.id.link);
    favBtn = itemView.findViewById(R.id.favBtn);
    //add to favorites
    favBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            int position = getAdapterPosition();
            ArticleItem articleItem = articleItems.get(position);
            if (articleItem.getFavStatus().equals("0")) {
                articleItem.setFavStatus("1");
                favDB.insertIntoTheDatabase(articleItem.getTitle(),
                    articleItem.getPubDate(),
                    articleItem.getDescription(),
                    articleItem.getWebUrl(),
                    articleItem.getKey_id(),
                    articleItem.getFavStatus());
                favBtn.setBackgroundResource(R.drawable.ic_favorite_color);
            } else {
                articleItem.setFavStatus("0");
                favDB.remove_fav(articleItem.getKey_id());
                favBtn.setBackgroundResource(R.drawable.ic_favorite_border);
            }
        }
    }); 
}

错误日志:

04/06 16:29:34: Launching 'app' on Nexus 4 API 23.
$ adb shell am start -n "com.example.favoritelist/com.example.favoritelist.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Waiting for application to come online: com.example.favoritelist.test | com.example.favoritelist
Waiting for application to come online: com.example.favoritelist.test | com.example.favoritelist
Waiting for application to come online: com.example.favoritelist.test | com.example.favoritelist
Connecting to com.example.favoritelist
Connected to the target VM, address: 'localhost:8628', transport: 'socket'
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/art: Debugger is active
I/System.out: Debugger has connected
    waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: debugger has settled (1495)
W/System: ClassLoader referenced unknown path: /data/app/com.example.favoritelist-2/lib/x86
W/FirebaseApp: Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
I/FirebaseInitProvider: FirebaseApp initialization unsuccessful
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
D/: HostConnection::get() New Host Connection established 0xb3fefd40, tid 6001
D/: HostConnection::get() New Host Connection established 0xa1cff240, tid 6040
I/OpenGLRenderer: Initialized EGL, version 1.4
W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
D/EGL_emulation: eglCreateContext: 0xae6b45c0: maj 3 min 1 rcv 4
D/EGL_emulation: eglMakeCurrent: 0xae6b45c0: ver 3 1 (tinfo 0xb2a145c0)
E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
    glUtilsParamSize: unknow param 0x00008cdf
E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
D/EGL_emulation: eglMakeCurrent: 0xae6b45c0: ver 3 1 (tinfo 0xb2a145c0)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.favoritelist, PID: 6001
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at com.example.favoritelist.ArticleAdapter$BbsNewsViewHolder$1.onClick(ArticleAdapter.java:89)
        at android.view.View.performClick(View.java:5198)
        at android.view.View$PerformClick.run(View.java:21147)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
I/Process: Sending signal. PID: 6001 SIG: 9
Disconnected from the target VM, address: 'localhost:8628', transport: 'socket'

最佳答案

如果您注意到,您会收到 NullPointException 并显示以下日志:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

因此,导致此异常的原因是您在 String 对象上调用了 .equals() 方法。回顾你的代码;您在 articleItem.getFavStatus().equals("0") 中仅使用了一次 .equals()

所以,显然您的 articleItem.getFavStatus() 是一个空值,您正尝试将其与“0”进行比较。因此,您需要检查它为什么返回 null,也可以将这部分代码包装到 try block 中,或者在该语句处放置一个断点来检查它。

希望对你有帮助。

关于java - 在 RecyclerView 中单击 Collection 夹项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61068972/

相关文章:

android - 为什么 Android 使用多个上下文并且每个上下文都不同?

java - 如何使用eclipse将php返回的数据等于android客户端?

android - 具有多个项目选取框的回收站 View

android - 在 RecyclerView 中更改 ImageView 中的图像

android - 在零位置插入 RecyclerView 项目 - 始终保持滚动到顶部

JAVA如何循环Socket变量

java - 隐藏状态栏android

java - 在Java中实现CustomList的List接口(interface)

java - 使用左连接、自定义包装器和动态搜索词的条件查询

android - 在 fragment getActivity() 与 mActivity 引用中显示 toast