私はAPIからフェッチするためにSAXParserFactoryとXMLリーダーを使用しています。しかし、インターネット接続がダウンすると、スタックされてアプリケーションがクラッシュしてしまいます。例外処理の概念はあまりよくありません。誰もが解決策を見つけるのを助けることができます。私はその操作を停止し、接続が失敗したときにカスタムメッセージを表示したい。 助けてください。 非常に緊急..接続に失敗しましたか?
0
A
答えて
1
あなたが行うことができます
try {
... do the IO and SAX parsing
} catch (Exception e) {
Toast.makeToast(context, "Failure: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
のようなものがあること言った:アンドロイド3以降では、ネットワークIOが(ときにシステムアプリを殺すバックグラウンドタスクにする必要がありますUIスレッドでネットワークIOを行う)、ioをバックグラウンドで置く必要があります。これは定義上UIにアクセスできません。
ここで(擬似コード)のようなパターンを助けることができる:
class MyAsyncTask extends AsyncTask {
String doInBackground() {
try {
... do IO/parsing
}
catch (Exception e) {
return e.getMessage();
}
return "ok";
}
onPostExecute(String in) {
Toast.makeToas(... in ...);
}
}
0
ここでは、Androidでネットワーク通信を実行する方法を詳細サンプルコードである:
try {
url = new URL(ForumURL);
URLConnection connection = url.openConnection();
//Set connection time out to 10 secs
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setConnectTimeout(10*1000);
int responseCode = httpConnection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK)
{
InputStream in = httpConnection.getInputStream();
DocumentBuilderFactory dbf;
dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse(in);
} //You can put an else condition here, if you want to process any error situations.
} catch (Exception e) {
//Your exception handler code here.
return;
}//catch (Exception e)
注意の言葉。 Androidでネットワーク通信を行うときは、メインのUIスレッドではなく、別のスレッドを使用して行います。この理由は、遅いネットワークでネットワーク操作を実行すると、アンドロイドOSによってANRでアプリが強制終了されるためです。
関連する問題
- 1. TCP接続に失敗しました
- 2. インターネットデータ接続に失敗しました
- 3. Rmysql接続に失敗しました
- 4. XMPP strophe接続接続プロセスに失敗しました
- 5. java.net.ConnectException:localhost/127.0.0.1への接続に失敗しました(ポート8080):接続に失敗しました:ECONNREFUSED ...(コードネームOne App)
- 6. DISQUSからエラー503接続に失敗しました
- 7. ノードjsで接続の検出に失敗しましたか?
- 8. データベース接続に失敗しました:AD接続を作成できません:[DB接続](接続)
- 9. GitHub "githubへの接続に失敗しました"エラーなし
- 10. My SQL Error:接続先が正しく応答しなかったため、接続に失敗しました
- 11. .NET Entity Frameworkの接続に失敗しました
- 12. Camera.open()throwing java.lang.RuntimeException:カメラサービスへの接続に失敗しました
- 13. Red5アプリケーションが接続に失敗しました
- 14. Eclipse C/C++リモートデバッグ接続に失敗しました
- 15. 安全な接続に失敗しました
- 16. Ionic:サーバーへの接続に失敗しました
- 17. MySQLが接続に失敗しました
- 18. Mac端末がネットワーク接続に失敗しました
- 19. c#websocketサーバーへの接続に失敗しました
- 20. ポート80への接続に失敗しました
- 21. レポートサーバーへの接続に失敗しました。 ssrsレポート
- 22. Eclipseのキューマネージャーランタイム例外への接続に失敗しました
- 23. PostgreSQLへのDjango接続: "ピア認証に失敗しました"
- 24. LINQ to Entities:DB接続に失敗しました
- 25. SQL Server 2008 - リモート接続に失敗しました
- 26. postgreSQLサーバの接続試行に失敗しました
- 27. Android Google Analyticsのサービスへの接続に失敗しました
- 28. Uncaught CurlException:7:接続に失敗しました
- 29. Rserve - リモート接続に失敗しました
- 30. リモートVMへの接続に失敗しました
'catch(Exception e) 'を介してすべての例外をキャッチすることは非常に悪いことです。あなたは 'IOException'や他のより特定の例外をうまく捕らえるべきです。例えば、 'OutOfMemoryException'は他の部分であなたのプログラムを破壊するでしょう。 – rekire