Android 網絡編程——Android 中的 HTTP 編程

Android中提供的HttpURLConnection和HttpClient接口可以用來開發HTTP程序。

區別

HttpClient是個很不錯的開源框架,封裝了訪問http的請求頭,參數,內容體,響應等等,

HttpURLConnection是java的標準類,什麼都沒封裝,用起來太原始,不方便,比如重訪問的自定義,以及一些高級功能等。

案例

URLConnection

    String urlAddress = "http://192.168.1.102:8080/AndroidServer/login.do";
    URL url;
    HttpURLConnection uRLConnection;
    public UrlConnectionToServer(){

    }      //向服務器發送get請求
    public String doGet(String username,String password){
        String getUrl = urlAddress + "?username="+username+"&password="+password;
        try {
            url = new URL(getUrl);
            uRLConnection = (HttpURLConnection)url.openConnection();
            InputStream is = uRLConnection.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String response = "";
            String readLine = null;
            while((readLine =br.readLine()) != null){
                //response = br.readLine();
                response = response + readLine;
            }
            is.close();
            br.close();
            uRLConnection.disconnect();
            return response;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
          //向服務器發送post請求
    public String doPost(String username,String password){
        try {
            url = new URL(urlAddress);
            uRLConnection = (HttpURLConnection)url.openConnection();
            uRLConnection.setDoInput(true);
            uRLConnection.setDoOutput(true);
            uRLConnection.setRequestMethod("POST");
            uRLConnection.setUseCaches(false);
            uRLConnection.setInstanceFollowRedirects(false);
            uRLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            uRLConnection.connect();

            DataOutputStream out = new DataOutputStream(uRLConnection.getOutputStream());
            String content = "username="+username+"&password="+password;
            out.writeBytes(content);
            out.flush();
            out.close();

            InputStream is = uRLConnection.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String response = "";
            String readLine = null;
            while((readLine =br.readLine()) != null){
                //response = br.readLine();
                response = response + readLine;
            }
            is.close();
            br.close();
            uRLConnection.disconnect();
            return response;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

 

HTTPClient
使用 HttpClient 需要以下 6 個步驟:
步驟 1 創建 HttpClient 的實例。
步驟 2 創建某種連接方法的實例,對於 get 方法是 GetMethod,而對於 post 方法是PostMethod。
步驟 3 調用步驟 1 中創建好的實例的 execute 方法來執行步驟 2 中創建好的 method實例。
步驟 4 讀 response。
步驟 5 釋放連接。
步驟 6 對得到的內容進行處理。

String urlAddress = "http://192.168.1.102:8080/qualityserver/login.do";  
public HttpClientServer(){  
          
 }  
      
public String doGet(String username,String password){  
    String getUrl = urlAddress + "?username="+username+"&password="+password;  
    HttpGet httpGet = new HttpGet(getUrl);  
    HttpParams hp = httpGet.getParams();  
    hp.getParameter("true");  
    //hp.  
    //httpGet.setp  
    HttpClient hc = new DefaultHttpClient();  
    try {  
        HttpResponse ht = hc.execute(httpGet);  
        if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
            HttpEntity he = ht.getEntity();  
            InputStream is = he.getContent();  
            BufferedReader br = new BufferedReader(new InputStreamReader(is));  
            String response = "";  
            String readLine = null;  
            while((readLine =br.readLine()) != null){  
                //response = br.readLine();  
                response = response + readLine;  
            }  
            is.close();  
            br.close();  
              
            //String str = EntityUtils.toString(he);  
            System.out.println("========="+response);  
            return response;  
        }else{  
            return "error";  
        }  
    } catch (ClientProtocolException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
        return "exception";  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
        return "exception";  
    }      
}  
  
public String doPost(String username,String password){  
    //String getUrl = urlAddress + "?username="+username+"&password="+password;  
    HttpPost httpPost = new HttpPost(urlAddress);  
    List params = new ArrayList();  
    NameValuePair pair1 = new BasicNameValuePair("username", username);  
    NameValuePair pair2 = new BasicNameValuePair("password", password);  
    params.add(pair1);  
    params.add(pair2);  
      
    HttpEntity he;  
    try {  
        he = new UrlEncodedFormEntity(params, "gbk");  
        httpPost.setEntity(he);  
          
    } catch (UnsupportedEncodingException e1) {  
        // TODO Auto-generated catch block  
        e1.printStackTrace();  
    }   
      
    HttpClient hc = new DefaultHttpClient();  
    try {  
        HttpResponse ht = hc.execute(httpPost);  
        //連接成功  
        if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
            HttpEntity het = ht.getEntity();  
            InputStream is = het.getContent();  
            BufferedReader br = new BufferedReader(new InputStreamReader(is));  
            String response = "";  
            String readLine = null;  
            while((readLine =br.readLine()) != null){  
                //response = br.readLine();  
                response = response + readLine;  
            }  
            is.close();  
            br.close();  
              
            //String str = EntityUtils.toString(he);  
            System.out.println("=========&&"+response);  
            return response;  
        }else{  
            return "error";  
        }  
    } catch (ClientProtocolException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
        return "exception";  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
        return "exception";  
    }     
}


servlet端json轉化:

resp.setContentType("text/json");  
        resp.setCharacterEncoding("UTF-8");  
        toDo = new ToDo();  
        List<UserBean> list = new ArrayList<UserBean>();  
        list = toDo.queryUsers(mySession);  
        String body;  

        //設定JSON  
        JSONArray array = new JSONArray();  
        for(UserBean bean : list)  
        {  
            JSONObject obj = new JSONObject();  
            try  
            {  
                 obj.put("username", bean.getUserName());  
                 obj.put("password", bean.getPassWord());  
             }catch(Exception e){}  
             array.add(obj);  
        }  
        pw.write(array.toString());  
        System.out.println(array.toString());

android端接收:

String urlAddress = "http://192.168.1.102:8080/qualityserver/result.do";  
        String body =   
            getContent(urlAddress);  
        JSONArray array = new JSONArray(body);            
        for(int i=0;i<array.length();i++)  
        {  
            obj = array.getJSONObject(i);  
            sb.append("用戶名:").append(obj.getString("username")).append("\t");  
            sb.append("密碼:").append(obj.getString("password")).append("\n");  
              
            HashMap<String, Object> map = new HashMap<String, Object>();  
            try {  
                userName = obj.getString("username");  
                passWord = obj.getString("password");  
            } catch (JSONException e) {  
                e.printStackTrace();  
            }  
            map.put("username", userName);  
            map.put("password", passWord);  
            listItem.add(map);  
              
        }  
          
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
        if(sb!=null)  
        {  
            showResult.setText("用戶名和密碼信息:");  
            showResult.setTextSize(20);  
        } else  
            extracted();  
   
       //設置adapter   
        SimpleAdapter simple = new SimpleAdapter(this,listItem,  
                android.R.layout.simple_list_item_2,  
                new String[]{"username","password"},  
                new int[]{android.R.id.text1,android.R.id.text2});  
        listResult.setAdapter(simple);  
          
        listResult.setOnItemClickListener(new OnItemClickListener() {  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                int positionId = (int) (id+1);  
                Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show();  
              
            }  
        });  
    }  
    private void extracted() {  
        showResult.setText("沒有有效的數據!");  
    }  
    //和服務器連接  
    private String getContent(String url)throws Exception{  
        StringBuilder sb = new StringBuilder();  
        HttpClient client =new DefaultHttpClient();  
        HttpParams httpParams =client.getParams();  
          
        HttpConnectionParams.setConnectionTimeout(httpParams, 3000);  
        HttpConnectionParams.setSoTimeout(httpParams, 5000);  
        HttpResponse response = client.execute(new HttpGet(url));  
        HttpEntity entity =response.getEntity();  
          
        if(entity !=null){  
            BufferedReader reader = new BufferedReader(new InputStreamReader  
                    (entity.getContent(),"UTF-8"),8192);  
            String line =null;  
            while ((line= reader.readLine())!=null){  
                sb.append(line +"\n");  
            }  
            reader.close();  
        }  
        return sb.toString();  
    }


 

發佈了55 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章