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


相关推荐

  • SPPnet 详解[通俗易懂]

    SPPnet 详解[通俗易懂]RCNN系列:RCNN,SPPNet,FastRCNN,FasterRCNN,R-FCN。  前不久刚刚看完rcnn和fastrcnn,对目标检测的学习更进一步。sppNet简介:作者:何凯明  2016年加入成为FAIR(facebook微软研究员),2011年获得博士学位,主要兴趣和研究在计算机视觉和深度学习。获得cpvr和iccv多个奖项。 SP…

    2022年6月12日
    48
  • linux系统chmod 755权限

    linux系统chmod 755权限最近学习Lua,写脚本./执行遇到-bash:./helloworld.lua:Permissiondenied提示,意思是没有可执行权限;通过查看使用:sudochmod755helloworld.lua给脚本添加可执行权限正常执行;ll查看文件发现-rwxr-xr-x1rootroot65Oct2119:13helloworld.lua多了读写可执行权限;下面对这些…

    2022年7月16日
    19
  • 递归迭代动态规划「建议收藏」

    递归迭代动态规划「建议收藏」一、定义递归:程序调用自身,从顶部将问题分解,其问题与其子问题是同一概念。通过解决掉所有分解出来的小问题,来解决整个问题。迭代:利用变量的原值推算出变量的下一个值。递归中一定有迭代,但是迭代中不一定有递归。动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。为了节约重复求相同子问题的时间,引入一个数组,把所有子问题的解存于该数组中,动态规划算法是空间换时间的算法。动态规划可以递归地实现,也可以非递归(循环的方法)地实现。运行速度:动态规划>迭代&gt

    2025年7月1日
    5
  • 零基础学习JAVA其实并不难!不相信?进来看看你就知道了

    零基础学习JAVA其实并不难!不相信?进来看看你就知道了其实Java并没有想象中的那么难,首先想要入这个行,要做好一个心理准备,那就是你想走远点,就得不间断的去学习,去汲取知识,前期不能怕辛苦,不要闲下来就打LOL、吃鸡、王者农药,有空就得多看看各种开源项目的代码,API的设计方式,各大网站的设计架构,理解各个环节的作用。补齐自己的知识视野。  当然这个行业也并不是什么门槛都没有,不要再私信我初中生、高中生、中专生能不能学习Java了。反正我个人是认为不可行的,或许你可以去问问其他大神?或许他们会觉得可以的。  下图是我更新过的自学表,分别分为4个阶段。按

    2022年7月7日
    42
  • MQ入门总结(一)消息队列概念和使用场景

    MQ入门总结(一)消息队列概念和使用场景

    2021年11月3日
    52
  • CEGUI渲染概论

    CEGUI渲染概论
    1、几个重要的类
    Direct3D9Renderer负责CEGUI的Render的接口
    RenderingSurface渲染接口类
    RenderingWindow可渲染窗口
    RenderTarget的继承关系相关类。
    Direct3D9GeometryBuffer类
    其方法
     voiddraw()const;//渲染
       voidsetTranslation(constVector3&t);

    2022年7月23日
    21

发表回复

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

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