-4

AndroidとJavaを発明した人は、自分で発明したわけではありません。AndroidでJavaを使用してアプリケーションの開発を開始して以来、最もばかげたエラーが発生し、本当に夢中になっています(そうすると、GoogleとSunMicrosystemsは「ブーム」になります)

引数として渡される文字列の長さを取得することになっているこの単純なコードがあります。アプリケーションがクラッシュするだけで、キーボードを罵倒したり拷問したりするのに数分かかります。

私のコード:

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

条件を削除すると、機能します(TextViewに「Ready」というテキストが表示されます)。これは奇妙なことであり、私はいくつかの小さな何かが欠けているかもしれないことを知っています。

手がかりとすべてに感謝します!

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

Waqas が言ったように、問題は文字列が null である可能性があるためです。文字列が null の場合、メソッドの長さは定義されていません。そのため、null をチェックする条件を追加します。

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

最初に結果が null かどうかを確認し、適切に処理してから、長さを確認します。私の最善の推測は、未処理の 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 に答える