5

Restful Protocolを使用してphp Webサービスを呼び出すのにどちらが適しているか完全に混乱しています.Webサービスを呼び出すために両方のAPI(HttpClientとHttpURLConnection)を使用しました。

HttpClientを使用して Web サービスを呼び出すとどうなるか

  • Froyoでは、完全に機能しています(ローカルホストとサーバーで)。
  • JellyBean では動作していますが、しばらくすると動作しません
  • HttpClient は localhost で正常に動作していますが、サーバーでの werbservice の呼び出しに問題があります。

HttpURLConnectionを使用して Web サービスを呼び出すとどうなるか

  • Froyo で正しく動作しない (ローカルホスト上)
  • 2 番目のポイントは HttpClient の 2 番目のポイントと同じです
  • PHP Web サービス ページを別の PHP ページにリダイレクトできません。

ウェブサービス abc.php (ローカルホストとサーバー上) を呼び出すと、ここから xyz.php のような別のページにリダイレクトされます。xyz.php から実際にデータを json 形式で android プロジェクトに返しますが、HttpClient を使用するとどうなるかは問題ありませんが、このリダイレクトは HttpURLConnection では機能しません。

HttpClient コード

//calling the webservice using AsyncTask
public String makeHttpReqToSrvr(String url,String requestType,List<NameValuePair> params) {

    HttpEntity httpEntity=null;
    HttpResponse httpResp = null;

    try {

        if (requestType == "GET") {

            //connection time out
            HttpParams httpParameters = new BasicHttpParams();
            int timeout1 = 1000*8;
                int timeout2 = 1000*8;
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeout1);
            HttpConnectionParams.setSoTimeout(httpParameters, timeout2);

            HttpClient httpClient = new DefaultHttpClient(httpParameters);
            String paramString =URLEncodedUtils.format(params, "utf-8");
            HttpGet httpGet = new HttpGet(url+"?"+paramString);
            httpResp = httpClient.execute(httpGet);
            httpEntity = httpResp.getEntity();

        }
        if (requestType == "POST") {
            // connection time out
            HttpParams httpParameters = new BasicHttpParams();
            int timeout1 = 1000*8;
                int timeout2 = 1000*8;
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeout1);
            HttpConnectionParams.setSoTimeout(httpParameters, timeout2);

            HttpClient  httpClient = new DefaultHttpClient(httpParameters);
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

            httpResp = httpClient.execute(httpPost);
            httpEntity = httpResp.getEntity();

        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } 
    // -- End and Start read the data using bufferreader
    try {
        if(httpEntity != null)
            json = EntityUtils.toString(httpEntity);
            json = strBuilder.toString();
                Log.v("JSON", "data"+json);

    } catch (Exception e) {
        e.printStackTrace();
    } 
    return json;
}


HttpURL接続コード

public String makeHttpReqToSrvr(String url,String requestType,List<NameValuePair> params) {

    try {
        URL urlPath= null;
        String paramString = URLEncodedUtils.format(params, "utf-8");

        if (requestType == "GET") {
            urlPath = new URL(url+"?"+paramString);
        }
        if (requestType == "POST") {
            urlPath = new URL(url);
        }

        conn = (HttpURLConnection) urlPath.openConnection();
        conn.setReadTimeout(10000); 
            conn.setConnectTimeout(15000); 
        conn.setDoInput(true);
        conn.setDoOutput(true);

        if (requestType == "GET") {
            conn.setRequestMethod("GET");
        }
        if (requestType == "POST") {
            conn.setRequestMethod("POST");

        }
        //send the data to the server using post
        dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes(paramString);
        dos.flush();

        // Starts the query
        conn.connect();
        int response = conn.getResponseCode();

        is = conn.getInputStream();

        // Convert the InputStream into a string
        json = readIt(is);

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (is != null) {
                is.close();
                dos.close();
                conn.disconnect();
            }
        } catch (IOException e) {

            e.printStackTrace();
        } 
    }
    return json;

上記のコードに問題がある場合は、だれか
が私に提案し、Web サービスを呼び出す完璧な方法を教えてください。いろいろ試しましたが、目標を達成できませんでした。上記の質問が分からない場合は、私に質問してください。

Apache HTTP クライアントには、Eclair と Froyo のバグがほとんどありません。これは、これらのリリースに最適な選択です。

Google は、Gingerbread 以降をターゲットとするアプリケーションには HttpURLConnection を使用することを推奨しています。じゃあフロヨは?私のアプリは froyo 以降で動作します。

どのクライアントが最適ですか?

どんな助けでも大いに役立ちます.ありがとう.

4

3 に答える 3

1

HttpUrlConnection は、2010 IO カンファレンスで android google エンジニアが語ったように良くありません。彼らによると、これはネットワークに悪影響を及ぼします。参照: http://www.youtube.com/watch?v=xHXn3Kg2IQE

httpclient または Androidhttpclient を使用する

幸運を祈ります

于 2013-11-11T10:54:44.177 に答える