NetworkOnMainThreadException
<スパン Web上の関連情報を個人的にまとめたものです。
<スパン
<スパン
アンドロイド
4.0では、ネットワークにアクセスするための旧コードを修正する必要があります
<スパン
エントリーアクティビティーのonCreateに追加する
- // 詳細はStrictModeのドキュメントをご覧ください。
- StrictMode.setThreadPolicy()を実行します。 新規 StrictMode.ThreadPolicy.Builder()
- .detectDiskReads()
- .detectDiskWrites()
- .detectNetwork() // あるいは、検出可能なすべての問題のための .detectAll()
- .penaltyLog()
- .build())のようになります。
- StrictMode.setVmPolicy( 新規 StrictMode.VmPolicy.Builder()
- .detectLeakedSqlLiteObjects()
- .detectLeakedClosableObjects()
- .penaltyLog()
- .penaltyDeath()
- .build())のようになります。
public void onCreate(Bundle savedInstanceState) { の中に、上記と同様に
また、上部には
今回実験しているプログラムは、「HeadFirst Android Development」の第3章にある「NASA Daily Image」というプログラムです。
コードを追加すると、ネットワークにアクセスできるようになり、rssがそれを読み込んで画像と対応する情報にアクセスし、表示することができます。
<スパン
<スパン
Android.os.NetworkOnMainThreadException
この例外は、メインスレッドでネットワークにアクセスする際の例外を意味していると思われます。Androidは4.0以前のバージョンではメインスレッドでネットワークにアクセスすることをサポートしていましたが、4.0以降この部分は最適化され、ネットワークにアクセスするコードはメインスレッドで書けなくなりました。
<スパンでは、どうすれば正常に動作するようになるのでしょうか?こちらをご覧ください。
<スパン
例 WebからUrlアドレスを取得する。
- url = AuthUtil.getAuthorizationURL()。
- もし (url ==) ヌル ) {
- Toast.makeText(WebViewActivity. これ R.string.auth_url_empty, 3000 ).show()を実行します。
- }
メインスレッドに直接書き込むと、2.xではまだ動きますが、4.0以降ではエラーが発生します。
<スパン を追加するなどの情報も、ネット上にたくさんあります。
- // 詳細はStrictModeのドキュメントをご覧ください。
- StrictMode.setThreadPolicy()を実行します。 新規 StrictMode.ThreadPolicy.Builder()
- .detectDiskReads()
- .detectDiskWrites()
- .detectNetwork() // あるいは、検出可能なすべての問題のための .detectAll()
- .penaltyLog()
- .build())のようになります。
- StrictMode.setVmPolicy( 新規 StrictMode.VmPolicy.Builder()
- .detectLeakedSqlLiteObjects()
- .detectLeakedClosableObjects()
- .penaltyLog()
- .penaltyDeath()
- .build())のようになります。
<スパン しかし
.detectLeakedClosableObjects() は、次のようなエラーを報告します。
つまり、このメソッドは使われていないのですが、ソースコードを見ると、そのメソッドがpublicであることがわかります
- /**
- * {@link java.io.
- * 終了方法が明示されているオブジェクトを確定する。
- * 閉じていないこと。
- <スパン *
- * <p>このようなオブジェクトは、常に明示的に閉じて
- <スパン * 不要なリソース漏れを防ぐことができます。
- <スパン */
- 公開 Builder detectLeakedClosableObjects() { {...
- 戻る enable(DETECT_VM_CLOSABLE_LEAKS)を使用します。
- }
<スパン これにはちょっと戸惑いましたね、まだ上級者ではないので。どうなっているのかわからない。
そこで、2つ目の方法として、マルチスレッドで非同期的にデータを読み込む方法を使うことにします。
コードはこのようになります。
main関数で空のメッセージを送信します。
- <スパン 新規 スレッド(){
- オーバーライド
- 公開 ボイド run() {
- // TODO 自動生成されるメソッドスタブ
- スーパー .run()を実行します。
- url = AuthUtil.getAuthorizationURL()。
- もし (url ==) ヌル ) {
- Toast.makeText(WebViewActivity. これ R.string.auth_url_empty, 3000 ).show()を実行します。
- }
- ハンドラ.sendEmptyMessage() 0 );
- }
- }.start();
undefined undefined
関連
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
AndroidStudio3.0 Error:Execution failed for task ':app:processDebugResources'.
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
アンドロイドのエリプサイズを使用する
-
Android Bluetooth 開発の基本プロセス
-
Android--shape--描画のコーナー、グラデーション、パディング、サイズ、ソリッド、ストロークのプロパティを指定する。
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
CursorIndexOutOfBoundsException:インデックス -1 が要求されました。
-
StrictMode$AndroidBlockGuardPolicy.onNetwork は android.os の下でエラーになります。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
Androidのadbデバイスがオフラインであることが判明
-
armeabi-v7a armeabi arm64-v8a パラメータの意味説明
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
Androidで発生した問題、解決策とヒント
-
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
-
view.getRootView()の本当の意味とテストについて
-
アンドロイドリストビュー
-
AndroidManifest.xmlの最も完全な詳細な説明
-
cmakeを使用しているアンドロイドスタジオはc++をサポートし、問題は、cmakeのエラーを同期することはできません。