-4

那些发明 Android 和 Java 的人并不是为自己发明的。自从我开始在 Android 中使用 Java 开发应用程序以来,我遇到了最荒谬的错误,我真的要发疯了(如果我这样做了,Google 和 Sun Microsystems 会发出“booooom”)

我有这个简单的代码,它应该获取作为参数传递的字符串的长度。该应用程序崩溃了,让我花了几分钟咒骂和折磨键盘。

我的代码:

@Override
protected void onPostExecute(String result) {
    if (result.length() == 0) {
        txtStatus.setText("Ready");
    }
}

如果我删除它的工作条件(文本“就绪”显示在我的 TextView 上)。这很奇怪,我知道我可能会遗漏一些小东西。

给我一些线索,谢谢你所做的一切!

PS如果你听到邻居的枪声,那可能是我。

4

4 回答 4

4

这是因为您的字符串可能是null。像这样做:

@Override
protected void onPostExecute(String result) {
    if (!TextUtils.isEmpty(result)) {
        txtStatus.setText("Ready");
    }
}
于 2012-04-04T19:43:55.873 回答
1

试试这个:

@Override
protected void onPostExecute(String result) {
    if (result != null && result.length() == 0) {
        txtStatus.setText("Ready");
    }
}
于 2012-04-04T19:44:42.210 回答
0

首先检查结果是否为空,适当处理,然后检查它的长度。我最好的猜测是你有一个未处理的 NullPointerException。

@Override
protected void onPostExecute(String result) {
    if (result == null) {
        result = ""; // change this line if null is an error.
    }
    if (result.length() == 0) {
        txtStatus.setText("Ready");
    }
}

找出问题所在并使程序崩溃的一种调试技术是将条件包装在 try/catch 块中。

    @Override
protected void onPostExecute(String result) {
    try {
        if (result.length() == 0) {
            txtStatus.setText("Ready");
        }
    catch (Throwable t) { // both error and exception inherit from Throwable.
        // print or inspect 't' here to determine the reason for the crash.
    }
}
于 2012-04-04T19:51:37.657 回答
0

正如 Waqas 所说,问题是因为您的字符串可能为空。如果字符串为空,则未定义方法长度。因此添加一个额外的条件检查空,即

if(result ==NULL)
// do something else
else
//your code here
于 2012-04-04T20:06:41.153 回答