【问题标题】:Overriden toString() gives error [duplicate]重写 toString() 给出错误 [重复]
【发布时间】:2015-12-08 23:58:24
【问题描述】:
             @Override
                protected void onHandleIntent(Intent intent) {
                    if (intent != null) {
                        final String action = intent.getAction();
                        if (ACTION_UPDATE_SERVER.equals(action)) {
                            final Server server = (Server)intent.getSerializableExtra(SERVER);
                            handleActionUpdateServer(server);
        [...]
    }
    }
}

server 是我在其中覆盖 toString() 的模型类。

排队

 final Server server = (Server)intent.getSerializableExtra(SERVER);

我收到这个错误

[package].[app] Java.lang.NullPointerException exception: cannot evaluate server.toString()

由于这个错误,它似乎无法检索序列化的额外内容。

但是如果我删除了 toString() 的实现,那么就没有错误。问题是我需要覆盖 toString 以便在列表中显示服务器类的对象时使用 listView 。 (运行 toString() 方法填充列表时没有问题。

我的 toString 实现如下所示:

 @Override
        public String toString() {
            StringBuilder strb = new StringBuilder(serverTitle);
            strb.append(" | Monitored: ");
            strb.append(isMonitored);
            strb.append(" | Online: ");
            strb.append(isOnline);
            return strb.toString();
        }

为什么当我自己覆盖 server.toString 时它无法评估它,为什么它甚至试图这样做?

不要将此标记为 nullPointerException 问题的重复,因为这对我没有任何帮助。 出现此错误后应用程序不会崩溃,它会继续运行,对我来说,该错误似乎与我的 toString() 实现有关

【问题讨论】:

  • 可能是因为服务器为空?在这种情况下为 toString() 调用空对象上的方法时,您将获得 NPE。在该行之前放置一个 if 条件来检查服务器对象是否为空。可能是这个 (Server)intent.getSerializableExtra(SERVER); 返回 null。
  • 有很多东西可能是空的,你还没有给出完整的错误输出或隔离代码的哪一行实际上导致了错误。

标签: java android string tostring


【解决方案1】:

看起来像serverTitle = null,因为new StringBuilder(null)会抛出NullPointerException,而如果server = null,我想,错误信息肯定是不一样的。请检查 serverTitle 值或使用以下代码:

@Override
        public String toString() {
            StringBuilder strb = new StringBuilder();
            strb.append(serverTitle); 
            strb.append(" | Monitored: ");
            strb.append(isMonitored);
            strb.append(" | Online: ");
            strb.append(isOnline);
            return strb.toString();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多