zoukankan      html  css  js  c++  java
  • Android使用HttpClient方法和易错问题

    HttpClient为Android开发人员提供了跟简洁的操作Http网络连接的方法,在连接过程中也有两种方式,get和post,先看一下怎样实现的

    默认是get方式

    //先将參数放入List,再对參数进行URL编码  
    List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();  
    params.add(new BasicNameValuePair("param1", "中国"));  
    params.add(new BasicNameValuePair("param2", "value2"));  
    //baseUrl             
    String baseUrl = "http://www.baidu.com";  
      
    //将URL与參数拼接  
    HttpGet getMethod = new HttpGet(baseUrl + "?" + param);  
                  
    HttpClient httpClient = new DefaultHttpClient();  
      
    try {  
        HttpResponse response = httpClient.execute(getMethod); //发起GET请求  
      
        Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码  
        Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//获取server响应内容  
    } catch (ClientProtocolException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  


    post方式

    //和GET方式一样,先将參数放入List  
    params = new LinkedList<BasicNameValuePair>();  
    params.add(new BasicNameValuePair("param1", "Post方法"));  
    params.add(new BasicNameValuePair("param2", "第二个參数"));  
                  
    try {  
        HttpPost postMethod = new HttpPost(baseUrl);  
        postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //将參数填入POST Entity中  
                      
        HttpResponse response = httpClient.execute(postMethod); //运行POST方法  
        Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码  
        Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //获取响应内容  
                      
    } catch (UnsupportedEncodingException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (ClientProtocolException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
    假设须要在获得网络资源后,去更新UI的一些东西,须要使用异步的方式,否则会错误发生

    Handler handler = new Handler() {
    
            @Override
            public void handleMessage(Message msg) {
    
                if (msg.what == 0x123) {
                    tv.setText(result);
                }
            }
    
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tv = (TextView) findViewById(R.id.tv);
            result = "";
    
            final HttpClient httpclient = new DefaultHttpClient();
    
            new Thread() {
                public void run() {
                    HttpGet httpRequest = new HttpGet(
                            "http://www.baidu.com");
    
                    try {
                        HttpResponse httpResponse = httpclient.execute(httpRequest);
                        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                            // 取得返回的字符串
                            result = EntityUtils.toString(httpResponse.getEntity());
                          
                            //tv.setText(result);//假设在这里来使用会报错
                          Message msg = new Message();
                           msg.what = 0x123;
                           handler.sendMessage(msg);
                        }
                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }.start();
        
        }




  • 相关阅读:
    记一次诡异的调优
    java动态代理学习笔记
    c#反射机制学习和利用反射获取类型信息
    php开启ssl的方法
    关于java中split的使用
    c#使用反射调用类型成员示例
    C#关于反射加载的问题
    Twitter:使用Netty 4来减少GC开销
    Java中如何修改Jar中的内容
    Android中自定义视图View之---前奏篇
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4079959.html
Copyright © 2011-2022 走看看