android中HttpClient和HttpConnection的区别和应用

来源:互联网 发布:第三方支付的书 知乎 编辑:程序博客网 时间:2024/06/05 15:23


HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。

      除此之外,在Android中,androidSDK中集成了ApacheHttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用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

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

0 0
原创粉丝点击