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 以降で動作します。
どのクライアントが最適ですか?
どんな助けでも大いに役立ちます.ありがとう.