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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux 文件句柄数查看命令_linux查看句柄数

    linux 文件句柄数查看命令_linux查看句柄数//查看系统支持最大文件句柄数cat/proc/sys/fs/file-max//三个值分别表示已分配文件句柄的数目、已分配未使用文件句柄的数目、文件句柄的最大数目cat/proc/sys/fs/file-nr//单个进程文件句柄限制ulimit-n//查看某个进程所占文件句柄//先通过ps获取进程idps|grep进程名//获取进程所占句柄ls-l/proc/进程id/fd…

    2022年10月17日
  • 初识Spring Boot框架[通俗易懂]

    初识Spring Boot框架[通俗易懂]前面的铺垫文章已经连着写了六篇了,主要是介绍了Spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说过“约定大于配置”这样一句话,就是说系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置,可是使用Spring或者SpringMVC的话依然有许多这样的东西需要我们进行配置,这样不仅徒增工作量

  • 其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频02 – 安装准备篇

    其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频02 – 安装准备篇简要流程:1、装.netframework2.0,装好了推荐重启下。2、安装MeGUI,安装界面神奇的是中文,我想不会有人有问题吧。3、启动MeGUI。第一次运行会自动搜索编码器升级。可以看到除了主程序都是在这里下载的,泪。点击Update,慢慢等吧。在升级过程中会提示你导入需要的配置方案,其中我们只需要PSP相关的…

    2022年10月16日
  • oracle listagg限制4000 varchar 使用xmlagg解决[通俗易懂]

    oracle listagg限制4000 varchar 使用xmlagg解决[通俗易懂]由于在使用中listagg中的字段值拼接起来后长度超过4000,报以下错误:经查询发现是listagg结果长度限制为Varchar4000,帮改为以下方式解决:使用xmlagg:selectrtrim(xmlagg(XMLELEMENT(e,N,’,’).EXTRACT(‘//text()’)).GetClobVal(),’,’) fromtest_name;标准如下…

  • Java——你真的了解Java异常处理机制吗?[通俗易懂]

    Java——你真的了解Java异常处理机制吗?[通俗易懂]你真的了解java异常处理吗?

  • Alex 的 Hadoop 菜鸟教程: 第2课 hadoop 安装教程 (CentOS6 CDH分支 yum方式)「建议收藏」

    Alex 的 Hadoop 菜鸟教程: 第2课 hadoop 安装教程 (CentOS6 CDH分支 yum方式)「建议收藏」前提条件:系统是centos6安装之前1.安装jdkcdh5对应的jdk是oracle-jdk1.7.0_25,注意是oracle-jdk,千万别yuminstalljdk就完事了,因为那样装的是openjdk到这边http://www.oracle.com/technetwork/java/javase/downloads/java-archiv

发表回复

您的电子邮箱地址不会被公开。

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