AndroidでのHttpリクエスト
14100 ワード
プログラムの核心はアルゴリズムとデータ構造の2つの部分に分けることができて、結局一定の方法(アルゴリズム)を使ってデータ(データ構造)を処理して、アルゴリズムは1種の能力で、絶えず学習して蓄積する必要があって、データは取得しなければならなくて、モバイルデバイスの上で、大量のデータを記憶することができなくて、だからサーバーからデータを取得する必要があります、サーバとデータのインタラクションを行うには、Httpリクエストも使用します.
Android 4.0以降、すべてのネットワーク上の操作はメインスレッドで実行できません!!!
Androidは現在、HttpClient(org.appache.http)とHttpURLConnection(java.net)の2つのHttp通信方式を提供しています. HttpClient:Android SDKはApacheから統合されており、比較的完備しており、Httpプロトコルを全面的にサポートしています. HttpURLConnection:データストリーム形式のデータの送信と受信に多く用いられ、伝送データ量が大きく、ファイルのアップロード/ダウンロードに適している.(URLベースの簡単な要求、応答機能用) 要求方式はまた、HttpGet要求とHttpPost要求に分けられる. get方式:パラメータをURLの後ろに接続し、各パラメータ間を&接続する. post方式:ルートURLを使用して、パラメータ情報を要求エンティティに配置して送信する.
HttpURLConnectionインスタンス
参照リンク:http://blog.csdn.net/yanzi1225627/article/details/22222735
リンク:http://www.cnblogs.com/mengdd/p/3142442.html
リンク:http://www.cnblogs.com/mengdd/p/3142442.html
リンク:http://www.cnblogs.com/hrlnw/p/4118480.html
Android 4.0以降、すべてのネットワーク上の操作はメインスレッドで実行できません!!!
Androidは現在、HttpClient(org.appache.http)とHttpURLConnection(java.net)の2つのHttp通信方式を提供しています.
HttpURLConnectionインスタンス
参照リンク:http://blog.csdn.net/yanzi1225627/article/details/22222735
private String getURLResponse(String urlString){
HttpURLConnection conn = null; //
InputStream is = null;
String resultData = "";
try {
URL url = new URL(urlString); //URL
conn = (HttpURLConnection)url.openConnection(); // URL
conn.setDoInput(true); // ,
conn.setDoOutput(true); // ,
conn.setUseCaches(false); //
conn.setRequestMethod("GET"); // get
is = conn.getInputStream(); // ,
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferReader = new BufferedReader(isr);
String inputLine = "";
while((inputLine = bufferReader.readLine()) != null){
resultData += inputLine + "
";
}
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(conn != null){
conn.disconnect();
}
}
return resultData;
}
HttpClient(Get)インスタンスリンク:http://www.cnblogs.com/mengdd/p/3142442.html
// GET , URL , ? , &
String url = baseURL + "?username=" + name + "&age=" + age;
HttpGet httpGet = new HttpGet(url);//
HttpClient httpClient = new DefaultHttpClient();
try{
//
HttpResponse response = httpClient.execute(httpGet);//
showResponseResult(response);// ,
}catch (Exception e){
e.printStackTrace();
}
HttpClient(Post)インスタンスリンク:http://www.cnblogs.com/mengdd/p/3142442.html
try{
HttpEntity requestHttpEntity =
new UrlEncodedFormEntity(pairList);
// URL URL ,
HttpPost httpPost = new HttpPost(baseURL);
//
httpPost.setEntity(requestHttpEntity);
//
HttpClient httpClient = new DefaultHttpClient();
//
HttpResponse response = httpClient.execute(httpPost);
//
showResponseResult(response);
}catch (Exception e){
e.printStackTrace();
}
HttpClient(Post)パッケージクラスリンク:http://www.cnblogs.com/hrlnw/p/4118480.html
/** * * & http * */
public class PostRequest implements Runnable {
private static final int NO_SERVER_ERROR=1000;
//
public static final String URL = "fill your own url";
//
public final static String ADD = "/add";
public final static String UPDATE = "/update";
public final static String PING = "/ping";
//
private static int connectionTimeout = 60000;
private static int socketTimeout = 60000;
//
private static HttpClient httpClient=new DefaultHttpClient();
private static ExecutorService executorService=Executors.newCachedThreadPool();
private static Handler handler = new Handler();
//
private String strResult;
private HttpPost httpPost;
private HttpResponse httpResponse;
private OnReceiveDataListener onReceiveDataListener;
private int statusCode;
/** * , */
public PostRequest() {
strResult = null;
httpResponse = null;
httpPost = new HttpPost();
}
/** * * @param listener */
public void setOnReceiveDataListener(OnReceiveDataListener listener) {
onReceiveDataListener = listener;
}
/** * httppost * * @param requestType * * @param nameValuePairs * */
public void iniRequest(String requestType, JSONObject jsonObject) {
httpPost.addHeader("Content-Type", "text/json");
httpPost.addHeader("charset", "UTF-8");
httpPost.addHeader("Cache-Control", "no-cache");
HttpParams httpParameters = httpPost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,
connectionTimeout);
HttpConnectionParams.setSoTimeout(httpParameters, socketTimeout);
httpPost.setParams(httpParameters);
try {
httpPost.setURI(new URI(URL + requestType));
httpPost.setEntity(new StringEntity(jsonObject.toString(),
HTTP.UTF_8));
} catch (URISyntaxException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/** * http */
public void execute() {
executorService.execute(this);
}
/** * * * @return true is available else false */
public static boolean checkNetState(Activity activity) {
ConnectivityManager connManager = (ConnectivityManager) activity
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}
return false;
}
/** * http */
@Override
public void run() {
httpResponse = null;
try {
httpResponse = httpClient.execute(httpPost);
strResult = EntityUtils.toString(httpResponse.getEntity());
} catch (ClientProtocolException e1) {
strResult = null;
e1.printStackTrace();
} catch (IOException e1) {
strResult = null;
e1.printStackTrace();
} finally {
if (httpResponse != null) {
statusCode = httpResponse.getStatusLine().getStatusCode();
}
else
{
statusCode=NO_SERVER_ERROR;
}
if(onReceiveDataListener!=null)
{
// onReceiveData
handler.post(new Runnable() {
@Override
public void run() {
onReceiveDataListener.onReceiveData(strResult, statusCode);
}
});
}
}
}
/** * http * */
public interface OnReceiveDataListener {
/** * the callback function for receiving the result data * from post request, and further processing will be done here * @param strResult the result in string style. * @param StatusCode the status of the post */
public abstract void onReceiveData(String strResult,int StatusCode);
}
}