AndroidでHttpGetを使用する

私は理解できません、なぜ私は任意のURLからエラーなしでhttpの応答を得ることができません。

   package de.vogella.android.asynctask;
import java.io.IOException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;

public class SimpleWebGrab extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        grabURL("http://android.com");
    }

    public void grabURL(String url) {
        //new GrabURL().execute(url);

        GrabURL grabURL = new GrabURL();//Создаем экземпляр
        grabURL.execute(url);//запускаем
    }

    private class GrabURL extends AsyncTask {
        private final HttpClient Client = new DefaultHttpClient();
        private String Content;
        private String Error = null;
        private ProgressDialog Dialog = new ProgressDialog(SimpleWebGrab.this);

        protected void onPreExecute() {
            Dialog.setMessage("Загрузка данных..");
            Dialog.show();
        }

        protected Void doInBackground(String... urls) {
            try {
                HttpGet httpget = new HttpGet(urls[0]);
                ResponseHandler responseHandler = new BasicResponseHandler();
                Content = Client.execute(httpget, responseHandler);
            } catch (ClientProtocolException e) {
                Error = e.getMessage();
                cancel(true);
            } catch (IOException e) {
                Error = e.getMessage();
                cancel(true);
            }

            return null;
        }

        protected void onPostExecute(Void unused) {
            Dialog.dismiss();
            if (Error != null) {
                Toast.makeText(SimpleWebGrab.this, Error, Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(SimpleWebGrab.this, "Источник: " + Content, Toast.LENGTH_LONG).show();
            }
        }

    }
}

私はこの行にエラーが表示されます:

} catch (IOException e) {
        Error = e.getMessage();
        cancel(true);
    }

エラーテキストは次のとおりです。

Connection to http://android.com refused

私が使っているURLは問題ではありません。すべて同じ。このステップでは、ステップインの後、クラスファイルエディタを取得します。デバッグ中に「ソースが見つかりません」というメッセージが表示されますが、「実行」を押すとアプリケーションがクラッシュしません。

HttpGet httpget = new HttpGet(urls[0]);

接続の理由は拒否されていますか?はいの場合は、どのように修正するのですか?前もって感謝します。

0
p.s.私はプロキシを使用します。
追加された 著者 wzbozon,
mb私はこれのようなものを置くべきですか?設定。 System.putString(getContentResolver()、Settings.System.HTTP_PROXY、 "192.168.1.1:8080");それは動作しません
追加された 著者 wzbozon,
私はそれがプロキシであるか、別のPCであるかを見るために通常の接続を持つデバイスで試してみることをお勧めします。また、EasyHttpClientライブラリを使って、それがあなたのために機能するかどうかを確認することもできます。 github.com/uscheller/EasyHttpClient
追加された 著者 mbwasi,

3 答え

AndroidManifest.xmlに「android.permission.INTERNET」という権限を追加しましたか?

1
追加された
yes:マニフェストの子として
追加された 著者 wzbozon,

これは単なる推測ですが、これはメインスレッドでリクエストを実行しているためです。 通常、このコードを実行するバックグラウンドスレッドを準備する必要があります。

コードは次のようになります。

Runnable r = new Runnable() { 
  void run()
  {
      //enter here httpget code
  }
}

new Handler().post(r);
1
追加された
GrabURLはAsyncTaskのサブクラスです。
追加された 著者 wzbozon,

I found out, that this is a common problem, when there is no internet on emulator. I solved my problem by typing -http-proxy xxx.xx.111.1:3128 in Run->Run Configurations->Target->Additional Command Line Options(which is at the bottom, need to scroll). This is where I found a solution: http://www.gitshah.com/2011/02/android-fixing-no-internet-connection.html

0
追加された