Android使用HttpClient方法和易错问题

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109667.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue怎么实现分页_vue实现表格

    vue怎么实现分页_vue实现表格今天有人问我怎么用vue实现分页功能,我开始觉得这不是后端的事吗?怎么我们前端也要干了,而且现在怎么多UI库,比如Element-ui,我觉得这是个很好的前端UI库啊。不过既然有人问了,我就写写吧。这是我的HTML代码<template><ul><!–上一页按钮–><li><buttonclass=”el-icon-arrow-left”@click=”getPageGo(-1)”:disabled=”isAc.

    2022年10月1日
    2
  • 微信小程序错误码参考大全

    微信小程序错误码参考大全

    2021年11月8日
    40
  • java对象转map_java中实现map与对象相互转换的几种实现

    java对象转map_java中实现map与对象相互转换的几种实现最近,研究map与java对象之间的相互转换,总结了5种方法:第一种:使用org.apache.commons.beanutils转换用到的主要jar包:commons-beanutils-1.9.3.jar//map转java对象publicstaticObjectmapToObject(Mapmap,Class>beanClass)throwsException{if(…

    2022年5月3日
    58
  • SSDP协议基础_最核心的协议

    SSDP协议基础_最核心的协议http://net.zdnet.com.cn/network_security_zone/2010/0715/1814422.shtmlSSDP协议,不知道大家是否听说过呢?这个协议的使用多出现在端口当中。下面我们就来了解一下这个协议的具体内容吧。什么是SSDP协议呢?SS

    2022年10月11日
    2
  • python和java哪个好找工作-Python和java哪个就业前景好些?

    python和java哪个好找工作-Python和java哪个就业前景好些?之前写过一篇文章,Python和Java哪个更适合做自动化测试?这个和Python和JAVA哪个更有发展前景?有着异曲同工之妙。Python和Java的争锋由来已久,作为测试菜鸟入门测试行业,都会在这两种语言之间纠结,而大部分人选择一门语言的依据源于他们的发展前景。本文旨在为零基础小白提供一些中肯的意见。所以大佬们,请手下留情,提个人想法经验可以,但是不能说我~首先可以确认的是提出这个问题的肯定是…

    2022年7月7日
    27
  • Pubmedy加载时显示程序包无效的解决方案[通俗易懂]

    目前谷歌应用商城已经下架Pubmedy,本地安装又遇到程序包无效:“CRX_HEADER_INVALID”。解决方案:将PubMedy.crx重命名为PubMedy.rar解压到要安装的位置找到扩展程序选项,并启用开发者选项选择加载已解压的扩展程序5.选择解压目录可以看到已经安装完毕…

    2022年4月9日
    96

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号