このブログでは、クライアントが Http プロトコルをカプセル化する方法、最もコアなコードの 1 つである post メソッドと get メソッドをクライアントがどのように使用するかについて説明します
以下は、Huang Shijun の「Android および PHP 開発」からの抜粋です
package com .app .demos.util;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org. apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org. apache.http.client.methods.HttpPost;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import com.app.demos.base.C;
import android.util.Log;
@SuppressWarnings("rawtypes")
public class AppClient {
// 圧縮戦略
final private static int CS_NONE = 0;
final private static int CS_GZIP = 1;
// ロジック変数す
private String apiUrl;
private HttpParams httpParams;
private HttpClient httpClient;
private int timeoutConnection = 10000;
private int timeoutSocket = 10000;
プライベート int 圧縮 = CS_NONE;
/ /charset default utf8
private String charset = HTTP.UTF_8;
public AppClient (String url) {
initClient(url);
}
パブリック AppClient (文字列 URL、文字列文字セット、int 圧縮) {
initClient(url);
this.charset = charset; // charset を設定
this.compress = compress; // 戦略を設定
}
private void initClient (String url) {
// API URLを初期化します
this.apiUrl = C.api.base + url; クラス内に自分で構築しました
パッケージ com.app.demos.base;
パブリック最終クラス C {
////////////////////////// //////////////////////////////////////////////// ////////////////////
// コア設定 (重要)
public static Final class dir {
public static Final String Base = "/sdcard/demos";
public staticfinal Stringfaces=base + "/faces";
public staticfinalStringimages=base + "/images";
}
public static Final class API {
public static Final String Base= "http://192.168.1.2:8001";
public static Final String Index= "/index/ Index";
public staticfinal String login= "/index/login";
public staticfinal String logout= "/index/logout";
public staticfinal String faceView = "/image/faceView";
public static Final String faceList = "/image/faceList";
public static Final String blogList= "/blog/blogList";
public static Final String blogView= "/blog/blogView";
public static Final String blogCreate= "/blog/blogCreate";
public static Final String commentList= "/comment/commentList";
public static Final String commentCreate= "/comment/commentCreate";
public staticfinal String customerView= "/customer/customerView";
public static Final String customerEdit= "/customer/customerEdit" ;
public staticfinal String fansAdd= "/customer/fansAdd";
public staticfinal String fansDel= "/customer/fansDel";
public staticfinal String Notice= "/通知/通知";
}
public staticfinalclassタスク{
publicstaticfinalintindex=1001;
publicstaticfinalintlogin=1002;
public staticfinal int logout= 1003;
public staticfinal int faceView= 1004;
public staticfinal int faceList= 1005;
public staticfinal int blogList= 1006;
public static Final int blogView= 1007;
public static Final int blogCreate= 1008;
public static Final int commentList= 1009;
public static Final int comment作成= 1010 ;
public static Final int customerView= 1011;
public static Final int customerEdit= 1012;
public static Final int fanAdd= 1013;
public static int ファンデル = 1014;
public static Final int Notice= 1015;
}
public static Final class err {
public static Final String network= "误";
public staticfinal String message= "消息格式错误";
public staticfinal String jsonFormat= "消息格式错误";
}
///////// //////////////////////////////////////////////// ////////////////////////////////////
// インテントとアクションの設定
public staticfinalクラスインテント{
public staticfinalクラスアクション{
public staticfinalString EDITTEXT= "com.app.demos.EDITTEXT";
public staticfinalString EDITBLOG= " com.app.demos.EDITBLOG";
}
}
public staticfinalclassaction{
publicstaticfinalclassedittext{
publicstaticfinalintCONFIG= 2001年;
public static Final int COMMENT= 2002;
}
}
/////////////////////////////////////////// // /////////////////////////////////////////////// ///// //
// 追加設定
public staticfinalclassweb{
public staticfinalStringbase= "http://192.168.1.2:8002";
パブリック静的最終文字列インデックス=ベース+ "/index.php";
パブリック静的最終文字列gomap =ベース+ "/gomap.php"; && apiSid.length() > 0) {
this.apiUrl += "?sid=" + apiSid;
}
// クライアントのタイムアウトを設定します
httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, timeoutConnection);HttpConnectionParams.setSoTimeout(httpParams, timeoutSocket);
// init client
httpClient = new DefaultHttp Client(http Params);入手は簡単ですHttpclient
}public void useWap () {
//インターネットにアクセスするために wap を選択する方法は次のとおりです
HttpHost proxy = new HttpHost("10.0.0.172", 80, "http");
httpClient.getParams().setParameter(ConnRoutePNames. DEFAULT_PROXY, プロキシ ;
Log.w("AppClient.get.url", this.apiUrl);
// get リクエストを送信
HttpResponse httpResponse = httpClient.execute(httpGet);if (httpResponse.getStatusLine ().getStatusCode() == HttpStatus.SC_OK) {String httpResult = resultFilter(httpResponse.getEntity());Log.w("AppClient.get.result", httpResult);
return httpResult;
} else {
return null;
}
} catch (ConnectTimeoutException e) {
throw new Exception(C.err.network);
} catch (Exception e ) {
e.printStackTrace();
}
return null;
}
public String post (HashMap urlParams) throws Exception {
//Enカプセル化HTTP投稿メソッド try {
HttpPost httpPost = headerFilter(new HttpPost(this.apiUrl));
List
postParams = new ArrayList();
// ポストパラメータを取得する
イテレータ it = urlParams.entrySet().iterator();
while (it.hasNext()) {
Map.Entryentry = (Map.Entry) it.next();
postParams.add (new BasicNameValuePair(entry.getKey().toString(),entry.getValue().toString()));
}
// データ charset を設定します
if (this.charset ! = null) {
httpPost.setEntity(new UrlEncodedFormEntity(postParams, this.charset));
} else {
httpPost.setEntity(new UrlEncodedFormEntity(postParams));
}
ログ.w( "AppClient.post.url", this.apiUrl);
Log.w("AppClient.post.data", postParams.toString());
// 投稿リクエストを送信
HttpResponse httpResponse = httpClient .execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String httpResult = resultFilter(httpResponse.getEntity());
Log。 w(" AppClient.post.result", httpResult);
return httpResult;
} else {
return null;
}
} catch (ConnectTimeoutException e) {
throw new例外 (C .err.network);
} catch (例外 e) {
e.printStackTrace();
}
return null;
}
private HttpGet headerFilter (HttpGet httpGet) {
取得データの送信リクエストを処理して、圧縮形式かどうかを確認します
switch (this.compress) {
case CS_GZIP:
httpGet.addHeader("Accept-Encoding", "gzip") ;
break;
default :
break;
}
return httpGet;
}
private HttpPost headerFilter ( HttpPost httpPost) { 送信リクエストを処理する投稿データが圧縮形式であるかどうかを確認する iswitch (this.com.compress) {
case CS_GZIP:
Httppost.addheader ("Accept-Entoding", "gzip"); Break;
}
return httpPost;
}
private String resultFilter(HttpEntityentity){ 取得したデータが圧縮形式かどうかを確認するために処理します
Str結果= null;
try {
switch (this.compress) {case CS_GZIP:
result = AppUtil.gzipToString(entity);
break;
default :
結果= EntityUtils.toString(entity);
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
上記は、関連コンテンツを含む Weibo Development 1 クライアントの HTTP get および post パッケージを紹介しており、PHP チュートリアルに興味のある友人に役立つことを願っています。