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




  • 相关阅读:
    字符编码 乱码问题
    Django ORM那些相关操作
    pymysql模块使用---Python连接MySQL数据库
    数据库MySQL 之 索引原理与慢查询优化
    数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件
    数据库 MySQL 之 数据操作
    数据库 MySQL 之 表操作、存储引擎
    [BZOJ 4212]神牛的养成计划(Trie+可持久化Trie)
    [LuoguP4094] [HEOI2016] [TJOI2016]字符串(二分答案+后缀数组+ST表+主席树)
    [BZOJ 2865]字符串识别(后缀数组+线段树)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4079959.html
Copyright © 2020-2023  润新知