1

エミュレーター (Android 4.0.3 / API 15) でコードを実行すると、この例外が発生します。ストリームを開くと、例外がスローされます。エラー メッセージはnullです。

try {
    String adress        = "xxx";
    URL url              = new URL(adress);
    InputSource source   = new InputSource(url.openStream());

} catch (Exception e) {
    (new TextView).setText("Error: "+e.getMessage());
}

URL は引き続きエミュレーター (ブラウザー内) で機能します。

プロジェクトをクリーンアップしました。

インターネット接続も許可されます。

<uses-permission android:name="android.permission.INTERNET" />

例外 :android.os.NetworkOnMainThreadException

4

2 に答える 2

4

メイン ( UI ) スレッドでネットワーク操作を実行しないでください。

メインスレッドは次の目的で使用されます。

  • ユーザーと対話します。
  • UI コンポーネントをレンダリングします。

長い操作を行うと、アプリがANRメッセージで閉じられる危険性があります。

以下を見てください:

AsyncTaskまたはThreadを使用してネットワーク操作を簡単に実行できます。

これは、Android でのスレッドとバックグラウンド作業に関する優れたチュートリアルです:リンク

于 2013-03-28T15:30:39.620 に答える
0

私のために働く:

マニフェスト.xml:

<uses-permission android:name="android.permission.INTERNET" />

.java:

private static boolean DEVELOPER_MODE = true;
...
protected void onCreate(Bundle savedInstanceState) {

     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // or .detectAll() for all detectable problems
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     }  
...

それが役に立てば幸い。

も参照してください: http://developer.android.com/reference/android/os/StrictMode.html

于 2013-05-11T23:04:20.443 に答える