Android中使用HttpClient实现HTTP通信效果
HTTP通信,这一案例在操作的时候遇到N多种种问题,是前面看过几个实例里面最麻烦的一个,因为没有系统的接触过JAVA,所以出了很多错误,也无从下手解决,这里经过对错误的检索实现了HTTP通信,以做记录。 实现 HTTP 通信有两种方式,一种是 httpurlconnection ,另一种是 HttpClient ,出于开发习惯,这里选择了 HttpClient 做了一次实现 看实例 ApacheHttpClient.java
package com.example.httpclient;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream;import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient;import android.util.Log;public class ApacheHttpClient { private static final String TAG = "Error";public String httpGet(String url) { String result = null; HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(httpGet); int httpStatus = httpResponse.getStatusLine().getStatusCode(); if (httpStatus == HttpStatus.SC_OK) { InputStream in = httpResponse.getEntity().getContent(); try { result = readString(in); } catch (Exception e) { Log.i(TAG, "Exception"); // TODO Auto-generated catch block e.printStackTrace(); } } else { result = "badly"; } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.i(TAG, "ClientProtocolException"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.i(TAG, "ClientProtocolException"); } return result; }protected String readString(InputStream in) throws Exception { byte[] data = new byte[1024]; int length = 0; ByteArrayOutputStream bout = new ByteArrayOutputStream(); while ((length = in.read(data)) != -1) { bout.write(data, 0, length); } return new String(bout.toByteArray(), "GBK"); } }
以上代码将 HttpClient 实现了简单的封装,以后使用只需调用对应的函数就可以了,下面看一个调用 MainActivity.java
package com.example.httpclient;import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; import android.widget.TextView;public class MainActivity extends Activity {private Handler handler = null; private String result = null;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);handler = new Handler(); new Thread() { public void run() { ApacheHttpClient aHttpClient = new ApacheHttpClient(); result = aHttpClient.httpGet("http://192.168.1.100"); handler.post(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub TextView tv = (TextView)findViewById(R.id.textView1); tv.setText(result); }}); } }.start(); }}
以上代码实现了对 ApacheHttpClient.java的调用,实现效果是会在应用界面上显示服务端内容。 这里需要说明的是,在调试过程中我遇到的问题 1、 android.os.NetworkOnMainThreadException 异常 这里说明的是,不能在主线程中访问网络 2、Only the original thread that created a view hierarchy can touch its views 这里说明的是Android的相关View和控件不是线程安全的,我们必须做独立的处理,所以这里通过一个Handler对象可以很好的传递Runnable或Message
Android中使用HttpClient实现HTTP通信效果相关推荐
- Android中利用HttpClient建立一次持久的连接
首先,http协议是无状态的连接,之前的两种方式get,与post连接方式,每点击一次就启动了一个线程,而在启动线程时 很自然的就重新的new出了一个新的HttpClient,相当于两个客户端向服务器 ...
- Android中使用httpclient访问服务器,需要session功能
2019独角兽企业重金招聘Python工程师标准>>> 虽然只有十分但是还是给你写一段 android中测试 跑得了 加点分可以继续追问我哦 呵呵~~~~public static ...
- android中利用实现二级联动的效果
按照惯例,首先上一张效果图. 本篇文章实现的效果就是如图中所圈的那样,实现类似于HTML中的二级联动的效果. 对于第一个选项我们读取的是本地xml文件来填充数据的, 对于第二个选项我们读取的是通过中央 ...
- Android中ImageView的点击变暗效果
实现点击图片(ImageView)变暗效果,有一个较简单的方法,就是讲目标图片设置为背景图片(setBackground),再创建一个selector.xml文件,里面放置一张普通状态时的透明图片,一 ...
- android+网络下载资源,【已解决】Android中利用HttpClient等库实现网络文件下载
[问题] 已经获得了Songtaste中歌曲的地址,比如: 中的真实下载地址是: 然后现在想要去下载这样的文件到Android手机的本地某个文件夹中. [解决过程] 1.其中,关于自动处理Cookie ...
- android图片gif动画效果,android中类似于gif 实现图片的动画效果
案例:实现gif动画效果,连续播放图片 由于是转载的,也就没必要多说,直接上代码 案例:在android中实现gif动态图片的效果: EarthAnimationActivity.java packa ...
- Android中ExpandableListView的使用
Android中ExpandableListView的使用 ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件 ...
- Android中获取天气,android中获取即刻天气
android中获取即时天气 先看效果: 需求非常简单,在菜单中加入天气查询的按钮,点击后显示即时天气. 准备工作: 1.下载华为能力SDK:http://imax.vmall.com/nj-camp ...
- 从Android中Activity之间的通信说开来
引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...
最新文章
- 求Fibonacci数列的前20项
- UVA 818 Cutting Chains(状压 + 暴搜)题解
- Cesium BingMapsImageryProvider类学习
- MySQL 的 count(*) 的优化,获取千万级数据表的总行数
- EF Code First学习笔记:数据库创建(转)
- leaflet 结合 Echarts4 实现散点图(附源码下载)
- Spring Cloud 微服务实战系列-Eureka注册中心(一)
- 如何用报表解决销售工作衡量问题
- js操作url的常用函数
- os.system 获取打印值_react获取触发元素的属性 e.target.dataset
- C4D实现宜家闹钟建模
- 分布式系统架构 - 学习/实践
- 【运筹学】整数规划、分支定界法总结 ( 整数规划 | 分支定界法 | 整数规划问题 | 松弛问题 | 分支定界法 | 分支定界法概念 | 分支定界法步骤 ) ★★
- android 使用adb命令安装安卓apk包
- 必备技能~程序员如何快速制作不同颜色不同大小的icon?
- 巧记作宾语补足语的省略to 的动词不定式
- websocket实践与浅入浅出
- 前端和后端的JSON数据交互
- flex 教程_完整的flex教程
- 2022年茶艺师(中级)考试题库及茶艺师(中级)找解析
热门文章
- 计算机技术大神,2017考研:计算机科学与技术学科大神给你的套路
- 晟数学院 oracle,Oracle 控制文件存储解析
- java freememory 单位_Runtime类中的freeMemory,totalMemory,maxMemory区别
- Java编程讲义之Eclipse开发工具
- python中isdigit()、isdecimal()和isnumeric的区别!
- 关于JWT的一些攻击方法
- 隐藏了十年的Sudo漏洞爆出:无需密码就能获取root权限
- 【算法与数据结构】堆排序是什么鬼?
- LeetCode中常用语言的一些基本方法记录
- Redis应用案例 查找某个值的范围