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
    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);
        }
    
    }