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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NFS修改2049端口号

    NFS修改2049端口号欢迎大家搜素微信公众号“东面而视”,分项技术及讨论技术《什么是NFS》   就是通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录内的数据。(一般共享视频,图片等静态数据) 为什么修改NFS的2049端口1. 其他服务再用2049端口2. 由于某些规定(如端口号必须在10000以上)修改方法1. 检查LINUX是否按装NFS[root@CT5_6-32-22…

    2022年6月27日
    27
  • virsh命令详解_lsattr命令详解

    virsh命令详解_lsattr命令详解virshhelp分组的命令:域管理(虚拟机实例管理)DomainManagement(helpkeyword’domain’):attach-device从一个XML文件附加装置attach-disk附加磁盘设备attach-interface获得网络界面autostart自动开始一个域

    2022年8月12日
    2
  • socket通讯原理及例程(一看就懂)

    socket通讯原理及例程(一看就懂)对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:什么是TCP/IP、UDP?Socket在哪里呢?Socket是什么呢?你会使用它们吗?什么是TCP/IP、UDP?TCP/IP(TransmissionControlProtocol/InternetProtocol)即传输控制协议/网间协议…

    2022年7月14日
    13
  • 回溯法解决01背包问题算法_01背包问题伪代码

    回溯法解决01背包问题算法_01背包问题伪代码0-1背包问题,在搜索过程中使用递归来完成。packagecom.test;classPack{intn=8;//物品个数intW=110;//背包总容量int[]Weights={1,11,21,23,33,43,45,55};//重量数组int[]Values={11,21,31,33,43,53,55,65};//价值数组intbestValu…

    2022年10月9日
    0
  • elf文件解析器_elf文件下载

    elf文件解析器_elf文件下载前两天网上投递了简历,面试了一家C++公司,然后对面负责人给我发了一份笔试题,题目是:请写出一个ELF文件解析器,需要能打印出所有segments和sections,并列出每个section和segment的映射关系。首先了解elf是什么,它的结构是怎么样的,然后去读一下别人的源码,读懂之后,自己开始编码。源码如下(”elf.h”头文件见后文),它会报warning,但是貌似不太影…

    2025年7月3日
    0
  • RX 和 TX_RX和OTC

    RX 和 TX_RX和OTC我们在ifconfig查看网卡配置时或者嵌入式开发的时候,经常会看到rx/tx缩写,其含义如下:RX==receive,接收,从开启到现在接收封包的情况,是下行流量。TX==Transmit,发

    2022年8月6日
    20

发表回复

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

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