2011-07-26 2 views
14

私はAndroidに問題があります。私はデバイス上で開発し、例外をキャッチする問題があります。私はAsyncTaskでいくつかのコードを実行し、最終的にそれを単純化しています:try catch例外は常にnullを返します

try 
{ 
    if (true) 
     throw new Exception("ERROR"); 
}  
catch (Exception e) 
{  
    Log.e("e", "exception", e); 
} 

私の問題は「E」変数は常にnullであるということです。実際に何が起こっているのか分かりません。それは時にはうまくいくのですが、いつ言ってもらえません。私はちょうど戻って来てブーム、数分のためにコンピュータから起きる、それは動作します。数分コーディングをして、もう一度それはnullです...約1年前にSOに1つの質問がありましたが、答えは知られていません。たぶん誰かが何らかのアイデアを持っているだろう。

Null exception

私はdebbugerがあるときにのみ発生した理由:(まだ任意の手掛かりを持っていない...それはそれの外とAsyncTaskとは何かを持って、私は例外を正しくcatchedしまったと思います私がデバイスからケーブルを取り出すと、実際にキャッチし、例外はもうnullではありません...

+0

UIスレッドでAsyncTaskをインスタンス化していますか? UIスレッドでexecute(Params ...)を呼び出していますか? onPreExecute()、onPostExecute(Result)、doInBackground(Params ...)、onProgressUpdate(Progress ...)を手動で呼び出していますか? タスクを複数回コールしていますか? –

+0

1つのインスタンス、on *メソッドへの手動呼び出しはありません。 UIスレッドでexecute(params)を呼び出して呼び出します。私はちょうどそのケースを渡すだろうと思う...事は他の人がそれを働かせるので、私は今VMのLinuxボックスhehで開発するために滞在します – mariozski

+0

賢明な決定!それが携帯電話で動作している場合、問題ありません。 –

答えて

4

eは、その時点でヌル値では不可能です。Eclipseを使用してアプリケーションをデバッグしている場合、その時点のe.toString()の値とe.toString()が返されます。null

は、このコードを使用して、別のテストを試してください:

try { 
    if (true) { 
     throw new Exception("ERROR"); 
    } 
}  
catch (Exception e) { 
    if (e == null) { 
     Log.e("e", "e is really null!!!"); 
    } 
    else { 
     Log.e("e", "e is not null, toString is " + e + " and message is " + e.getMessage()); 
    } 
} 
+4

上のNPEと} //アプリがクラッシュし、私はあなたがundestandしていないと思う...変数eがnullであるあなたがNullPointerExceptionが得られますよう...あなたはそれにメソッドを実行することはできません。 Log.eの3番目のパラメータ以外はThrowable not String ... – mariozski

+1

これを試しましたか? –

+0

まあ、私は私が言うしようとしている何 – mariozski

1

実際のデバイス(ギャラクシータブ2)上のデバッグ中に私は、AsyncTask内部まったく同じ奇妙な問題を抱えていました。 (そして、はい、私は"e is really null!!!"が@italoによって提案されたテストをしています)

私の場合は、アンドロイドデバイスのUSBプラグを抜いてから再度接続してから、もう一度アプリケーションを実行してから不思議に問題が消えました。

hereで説明したように、もう1つの提案、クリーニング、再ビルドが私のためには解決されませんでしたが、誰かのためではないでしょうか。

2

私はこれが古い質問だと知っていますが、これも私のところで起こりました。問題はデバッガ自体のようです。
アプリを実行すると(ctrl + F11)、適切な例外(e != null)がキャッチされます。

+0

正確に。もちろん、それはデバッガです。他にはできない。例外は動作します。 – EJP

2

私はこの同じ問題を抱えていました。他の人のようにデバッガであることがわかりました。だから私がデバッグしたのは、catchブロックの右にではなく、catchブロックの最初の行にブレークポイントを置くことです。私のために働くと思った!

+1

奇妙なことに、私はこれまで見たことがない。私はこのページのすべての推奨事項を数回試しましたが、どれもうまくいきませんでした。ついにそれを数回実行した後、この1つは最終的に成功し、明白な理由がないために例外が設定されました。あなたは永続的でなければならないと思います – JCricket

+0

同じ問題があってこれが修正されました。これは受け入れられた答えでなければなりません。そしてこのバグはJetBrains IntelliJに報告されるべきです。 – John

関連する問題