0

Android 3.1 でアプリを作成しており、galaxy tab 10.1 を使用してアプリをテストしています。

特定の Web サイトから情報を取得するために、OpenHttpConnection() という関数を作成しました。コード スニペットは次のとおりです。

private InputStream OpenHttpConnection(String urlString) throws IOException {
    InputStream in = null;
    int response = -1;

    URL url = new URL(urlString);
    String host = url.getHost();
    InetAddress address = InetAddress.getByName(host);
    String ip = address.getHostAddress();
    Toast.makeText(this, "ip address: " + ip.toString(), Toast.LENGTH_SHORT).show();

    try {
        HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
        httpConn.setAllowUserInteraction(false);
        httpConn.setInstanceFollowRedirects(true);
        httpConn.setConnectTimeout(5 * 1000);
        httpConn.setRequestMethod("GET");
        Toast.makeText(this, "prepare for connecting", Toast.LENGTH_SHORT).show();
        httpConn.connect();
        Toast.makeText(this, "connecting established", Toast.LENGTH_SHORT).show();
        response = httpConn.getResponseCode();
        if (response == HttpURLConnection.HTTP_OK) {
            in = httpConn.getInputStream();
        }
    } catch (Exception ex) {
        throw new IOException("Error connecting");
    }
    return in;
}

「httpConn.connect()」行が実行されているときにエラーが発生します。この質問をグーグルで調べたところ、多くの人がこの問題を抱えていることがわかり、DNSの問題だと言いました. 次に、この URL の IP アドレスを取得しようとしましたが、失敗しました。何か問題がありました。私はすでに次のように AndroidManifest.xml にアクセス許可を追加しています:

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

いくつかの許可を逃しましたか?

タブレットを使用してインターネットに正常にアクセスでき、タブレットの DNS は PC と同じであり、それらは 1 つの LAN にあります。

私は非常に混乱しています。それを解決するのを手伝ってもらえますか?

;)どうも

4

1 に答える 1

0

私は最近これを行っているので、おそらく2つの問題が考えられます。

  1. Handlerまたはを使用して、バックグラウンドスレッドでこれを実行していることを確認する必要がありますAsyncTask

  2. UIスレッドで行う必要がある場合は、をオフにする必要がありますStrict mode

Androidでバックグラウンドスレッドを実行する際のこのすばらしいチュートリアルを確認してください。チュートリアルのAyncTaskセクションは実際にWebページをダウンロードするため、非常に関連性があります。私は最近それを試しました、そしてそれは働きます。

于 2012-04-08T09:50:34.437 に答える