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通信效果相关推荐

  1. Android中利用HttpClient建立一次持久的连接

    首先,http协议是无状态的连接,之前的两种方式get,与post连接方式,每点击一次就启动了一个线程,而在启动线程时 很自然的就重新的new出了一个新的HttpClient,相当于两个客户端向服务器 ...

  2. Android中使用httpclient访问服务器,需要session功能

    2019独角兽企业重金招聘Python工程师标准>>> 虽然只有十分但是还是给你写一段 android中测试 跑得了 加点分可以继续追问我哦 呵呵~~~~public static ...

  3. android中利用实现二级联动的效果

    按照惯例,首先上一张效果图. 本篇文章实现的效果就是如图中所圈的那样,实现类似于HTML中的二级联动的效果. 对于第一个选项我们读取的是本地xml文件来填充数据的, 对于第二个选项我们读取的是通过中央 ...

  4. Android中ImageView的点击变暗效果

    实现点击图片(ImageView)变暗效果,有一个较简单的方法,就是讲目标图片设置为背景图片(setBackground),再创建一个selector.xml文件,里面放置一张普通状态时的透明图片,一 ...

  5. android+网络下载资源,【已解决】Android中利用HttpClient等库实现网络文件下载

    [问题] 已经获得了Songtaste中歌曲的地址,比如: 中的真实下载地址是: 然后现在想要去下载这样的文件到Android手机的本地某个文件夹中. [解决过程] 1.其中,关于自动处理Cookie ...

  6. android图片gif动画效果,android中类似于gif 实现图片的动画效果

    案例:实现gif动画效果,连续播放图片 由于是转载的,也就没必要多说,直接上代码 案例:在android中实现gif动态图片的效果: EarthAnimationActivity.java packa ...

  7. Android中ExpandableListView的使用

    Android中ExpandableListView的使用 ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件 ...

  8. Android中获取天气,android中获取即刻天气

    android中获取即时天气 先看效果: 需求非常简单,在菜单中加入天气查询的按钮,点击后显示即时天气. 准备工作: 1.下载华为能力SDK:http://imax.vmall.com/nj-camp ...

  9. 从Android中Activity之间的通信说开来

    引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...

最新文章

  1. 求Fibonacci数列的前20项
  2. UVA 818 Cutting Chains(状压 + 暴搜)题解
  3. Cesium BingMapsImageryProvider类学习
  4. MySQL 的 count(*) 的优化,获取千万级数据表的总行数
  5. EF Code First学习笔记:数据库创建(转)
  6. leaflet 结合 Echarts4 实现散点图(附源码下载)
  7. Spring Cloud 微服务实战系列-Eureka注册中心(一)
  8. 如何用报表解决销售工作衡量问题
  9. js操作url的常用函数
  10. os.system 获取打印值_react获取触发元素的属性 e.target.dataset
  11. C4D实现宜家闹钟建模
  12. 分布式系统架构 - 学习/实践
  13. 【运筹学】整数规划、分支定界法总结 ( 整数规划 | 分支定界法 | 整数规划问题 | 松弛问题 | 分支定界法 | 分支定界法概念 | 分支定界法步骤 ) ★★
  14. android 使用adb命令安装安卓apk包
  15. 必备技能~程序员如何快速制作不同颜色不同大小的icon?
  16. 巧记作宾语补足语的省略to 的动词不定式
  17. websocket实践与浅入浅出
  18. 前端和后端的JSON数据交互
  19. flex 教程_完整的flex教程
  20. 2022年茶艺师(中级)考试题库及茶艺师(中级)找解析

热门文章

  1. 计算机技术大神,2017考研:计算机科学与技术学科大神给你的套路
  2. 晟数学院 oracle,Oracle 控制文件存储解析
  3. java freememory 单位_Runtime类中的freeMemory,totalMemory,maxMemory区别
  4. Java编程讲义之Eclipse开发工具
  5. python中isdigit()、isdecimal()和isnumeric的区别!
  6. 关于JWT的一些攻击方法
  7. 隐藏了十年的Sudo漏洞爆出:无需密码就能获取root权限
  8. 【算法与数据结构】堆排序是什么鬼?
  9. LeetCode中常用语言的一些基本方法记录
  10. Redis应用案例 查找某个值的范围