0

アプリの Android で HTTP クライアント接続を行う方法を学習していますが、問題が発生しています。New Boston のレター フォー レターのチュートリアルに従いましたが、それでもうまくいきませんでした。デバイスの上部にあるステータス バーを見ると、データを取得するために送信されているのに、何も戻ってこないことがわかります。

理想的には、この時点で、サーバー上の api.php ファイルに接続し、ログイン コマンドを送信する必要があります (その後、ログイン コマンドが返すキーを使用してポスト コマンドを送信します)。

HttpPost に渡す URI を作成する必要があることはわかっていますが、その時点で道に迷ってしまいます...実行したサンプル アプリは、チュートリアルのようにデータを返しません。

インターネット アクセスを許可するようにマニフェストをセットアップしました。

チュートリアルのコードは次のとおりです (HttpGet を使用していますが、動作しない理由がわかれば HttpPost に変換できます)。

public String getInternetData() throws Exception {
    BufferedReader in = null;
    String data = "did this work";
    try {
        HttpClient client = new DefaultHttpClient();
        URI website = new URI("http://www.longship.ca");
        HttpGet request = new HttpGet();
        request.setURI(website);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity()
                .getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while ((l = in.readLine()) != null) {
            sb.append(l + nl);
        }
        in.close();
        data = sb.toString();
        return data;
    } finally {
        if (in != null) {
            try {
                in.close();
                return data;
            } catch (Exception e) {
                e.printStackTrace();

            }
        }

    }

}

コメントで述べたように、メインの Java ファイルからコードを追加しました。呼び出されるクラスは「GetMethodEx.java」と呼ばれます。

public class HttpTest extends Activity {

TextView tvResponse;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webtest);
    tvResponse = (TextView) findViewById(R.id.tvHttp);
    GetMethodEx gme = new GetMethodEx();
    String returned;
    try {
        tvResponse.setText("Getting Data");
        returned = gme.getInternetData();

        tvResponse.setText(returned);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.e("MyLogTag", "Exception in getInternetData", e);
    }

}

}

4

2 に答える 2