尝试调用虚拟方法'int java.lang.String.hashCode()'



我正在尝试使用Volley Library从URL加载图像到girdview。为此,我遵循本教程。当我运行我的项目时,它从服务器数据库收集所有url,然后存储在arraylist中。但不显示图像。我得到了java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference误差。它甚至没有指向我得到这个错误的代码行号。Logcat输出

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
        at com.android.volley.Request.<init>(Request.java:136)
        at com.android.volley.toolbox.ImageRequest.<init>(ImageRequest.java:71)
        at com.android.volley.toolbox.ImageLoader.get(ImageLoader.java:219)
        at com.android.volley.toolbox.ImageLoader.get(ImageLoader.java:171)
        at com.android.volley.toolbox.NetworkImageView.loadImageIfNecessary(NetworkImageView.java:141)
        at com.android.volley.toolbox.NetworkImageView.onLayout(NetworkImageView.java:190)
        at android.view.View.layout(View.java:15596)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.GridView.setupChild(GridView.java:1542)
        at android.widget.GridView.makeAndAddView(GridView.java:1436)
        at android.widget.GridView.makeRow(GridView.java:361)
        at android.widget.GridView.fillDown(GridView.java:302)
        at android.widget.GridView.fillFromTop(GridView.java:437)
        at android.widget.GridView.layoutChildren(GridView.java:1276)
        at android.widget.AbsListView.onLayout(AbsListView.java:2148)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.widget.ScrollView.onLayout(ScrollView.java:1502)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

谁能告诉我到底是什么问题,我怎么解决这个问题?

您应该检查从服务器获取数据的图像的空值

在尝试从数据类的片段加载URL到webview客户端时,我遇到了同样的错误。
我自己编写了hashcode函数的实现,以检查来自API的null或空响应。
下面是实现。

data class Article(
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null,
    val author: String,
    val content: String,
    val description: String,
    val publishedAt: String,
    val source: Source,
    val title: String,
    val url: String,
    val urlToImage: String
) : Serializable{
    override fun hashCode(): Int {
        var result = id.hashCode()
      if(url.isNullOrEmpty()){
          result = 31 * result + url.hashCode()
      }
        return result
    }
}

获取字符串值为空,在本例中显示string .hashcode()错误

我也有同样的问题。我想我找到了一个解决办法。在链接到服务器,你正试图与之通信,指定通信协议,即"http://"或"https://"之前添加域和所有。这就解决了我的问题。希望对大家有所帮助

我在另一个内容中有此错误,并通过在Android Studio中更新Android SDK来修复它。

我的服务器是https,所以得到一个不同的错误。我删除了https,只保留了域名,但它不起作用,所以我最终把https:联系我的主机,以放宽对域名的安全规则或为特定域名创建特殊规定。检查你在哪里实现你的网站url和添加http或https取决于你的网站在浏览器上的样子。

您正在映射API响应的数据模型很可能期望一个完全缺失或为空的非空String参数。这可能是因为您输入的参数名不正确,或者API认为参数是可选的。

Object Source有两个参数,id和name,那么id总是null,所以我赋值为"0"当使用它的方法onItemClickListener时,它为我工作

当您从服务器获取数据并将其保存到对象中时,然后调用日志函数来查看API提供的所有数据。之后,将所有值从null更改为空字符串和0。

onItemClickListener?.let {
                    article.source.id = ""
                    article.id = 0
                    article.author = ""
                    Log.i("News adapter ", article.toString())
                    it(article)
                }

这对我有用!

相关内容

最新更新