4

私はAndroid 2.3.3を使用しています。うまく機能するRSSリーダーを作成しました。次に、その単純なRSSリーダーのコードを別のアクティビティに統合し、慎重にコピーして貼り付けただけで、エラーはありませんでした。

問題は、エミュレーターでアプリを実行すると、エラー接続例外が発生することです。次に、tryブロックのすべての行の後にトーストを配置することで、問題がhttpconnection.connect();行にあることがわかりました。

私のlogcatがjavaio exception:error connecting.

    try {
        HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
        //Toast.makeText(this, "urlconnection passed", Toast.LENGTH_SHORT).show();
        httpURLConnection.setAllowUserInteraction(false);
        httpURLConnection.setInstanceFollowRedirects(true);
        //Toast.makeText(this, "setting response method", Toast.LENGTH_SHORT).show();
        httpURLConnection.setRequestMethod("GET");
        //Toast.makeText(this, "connecting", Toast.LENGTH_SHORT).show();
        httpURLConnection.connect();
        Toast.makeText(this, "on response code", Toast.LENGTH_SHORT).show();
        response = httpURLConnection.getResponseCode();
        //Toast.makeText(this, "response code passed", Toast.LENGTH_SHORT).show();
        if (response == HttpURLConnection.HTTP_OK) {
            //Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show();
            inputStream = httpURLConnection.getInputStream();
        }

    } catch (Exception e) {
        // TODO: handle exception
        throw new IOException("Error connecting");
    }

オブジェクトを作成するコードは次のとおりです。

URL url = new URL(UrlString);
URLConnection connection = url.openConnection();
if (!(connection instanceof HttpURLConnection)) 
  throw new IOException("Not a HTTP connection"); 
4

1 に答える 1

1

networkonmainthread 例外が発生します

これは、メインスレッドでネットワーク操作を行っていることを意味し、Strict モードでは許可されていません。

「メイン スレッドで」とは通常onResume、 、onPause、またはonClickOnClickListener のメソッドなどのイベント ハンドラで実行していることを意味します。この投稿 (痛みのないスレッド化) を見て、何が問題で、なぜこれが許可されていないのかを理解してください。一般に、メイン スレッドでネットワーク操作を実行すると、GUI イベントの処理がブロックされ、ネットワーク操作が遅いと、アプリケーションが応答しなくなります。

Strict Modeは API レベル 9 で登場したため、最小 SDK バージョンが 10 の場合に問題が発生する理由と、最小 SDK バージョン 8 で動作する理由が説明されています。

バックグラウンドで実行するには、 AsyncTaskまたはその他のメソッドを使用する必要があります。これについては1を参照してください。

于 2012-08-15T16:46:29.847 に答える