HTTP通信,这一案例在操作的时候遇到N多种种问题,是前面看过几个实例里面最麻烦的一个。由于没有系统的接触过JAVA,所以出了非常多错误,也无从下手解决,这里经过对错误的检索实现了HTTP通信,以做记录。

实现 HTTP 通信有两种方式,一种是  httpurlconnection ,还有一种是  HttpClient ,出于开发习惯。这里选择了 HttpClient 做了一次实现

看实例  ApacheHttpClient.java

  1. package com.example.httpclient;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6.  
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.HttpStatus;
  9. import org.apache.http.client.ClientProtocolException;
  10. import org.apache.http.client.HttpClient;
  11. import org.apache.http.client.methods.HttpGet;
  12. import org.apache.http.impl.client.DefaultHttpClient;
  13.  
  14. import android.util.Log;
  15.  
  16. public class ApacheHttpClient {
  17. private static final String TAG = "Error";
  18.  
  19. public String httpGet(String url) {
  20. String result = null;
  21. HttpClient httpClient = new DefaultHttpClient();
  22. HttpGet httpGet = new HttpGet(url);
  23. HttpResponse httpResponse = null;
  24. try {
  25. httpResponse = httpClient.execute(httpGet);
  26. int httpStatus = httpResponse.getStatusLine().getStatusCode();
  27. if (httpStatus == HttpStatus.SC_OK) {
  28. InputStream in = httpResponse.getEntity().getContent();
  29. try {
  30. result = readString(in);
  31. } catch (Exception e) {
  32. Log.i(TAG, "Exception");
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. }
  36. } else {
  37. result = "badly";
  38. }
  39. } catch (ClientProtocolException e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. Log.i(TAG, "ClientProtocolException");
  43. } catch (IOException e) {
  44. // TODO Auto-generated catch block
  45. e.printStackTrace();
  46. Log.i(TAG, "ClientProtocolException");
  47. }
  48. return result;
  49. }
  50.  
  51. protected String readString(InputStream in) throws Exception {
  52. byte[] data = new byte[1024];
  53. int length = 0;
  54. ByteArrayOutputStream bout = new ByteArrayOutputStream();
  55. while ((length = in.read(data)) != -1) {
  56. bout.write(data, 0, length);
  57. }
  58. return new String(bout.toByteArray(), "GBK");
  59. }
  60. }

以上代码将 HttpClient 实现了简单的封装。以后使用仅仅需调用相应的函数就能够了,以下看一个调用 MainActivity.java

  1. package com.example.httpclient;
  2.  
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.app.Activity;
  6. import android.view.Menu;
  7. import android.widget.TextView;
  8.  
  9. public class MainActivity extends Activity {
  10.  
  11. private Handler handler = null;
  12. private String result = null;
  13.  
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18.  
  19. handler = new Handler();
  20. new Thread() {
  21. public void run() {
  22. ApacheHttpClient aHttpClient = new ApacheHttpClient();
  23. result = aHttpClient.httpGet("http://192.168.1.100");
  24. handler.post(new Runnable(){
  25. @Override
  26. public void run() {
  27. // TODO Auto-generated method stub
  28. TextView tv = (TextView)findViewById(R.id.textView1);
  29. tv.setText(result);
  30. }});
  31. }
  32. }.start();
  33. }
  34.  
  35. }

以上代码实现了对 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请求

    一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是 ...

  2. android中四大组件之间相互通信

    好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...

  3. Mono For Android中简单实现按钮的动画效果

    Android中动画的分Tween Animation和Frame Animation,本节主要讲Tween Animation的实现. 一般是通过XML文件来定义动画的,具体如下: 1.在项目res ...

  4. Android中实现圆角矩形及半透明效果。

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在做Android开发时,我们为了美观,有时候需要使用圆角矩形,或半透明之类的效果,在网页设计中很容易实现.但在Android开发中 ...

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

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

  6. android中listview的item滑动删除效果(已解决listview点击问题)

    领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...

  7. Android中利用httpclient进行网络通信的方法(以用户登录为例说明)

    http://www.android100.org/html/201406/09/22915.html 1.服务器端 服务器端和android没有太大关系,对J2EE比较熟悉的话写起来应该很容易,这里 ...

  8. android 中的 Handler 线程间通信

    一. 在MainActivity中为什么只是类似的写一行如下代码就可以使用handler了呢? Handler handler = new Handler() { @Override public v ...

  9. android中fragment与activity之间通信原理以及例子

    参考文章 http://blog.csdn.net/guozh/article/details/25327685#comments Activity和fragment通信方式一般有3种方法 1.在fr ...

随机推荐

  1. Android自定义控件简单实现ratingbar效果

    先上图: 一开始让我自定义控件我是拒绝的,因为android很早以前就有一个控件ratingbar,但是设置样式的时候我发现把图片设置小一点就显示不全,一直找不到解办法!(可以设置系统的自带的小样式) ...

  2. 携手互联网企业10巨头设VC基金

    包括小米科技.盛大集团.人人网.掌趣科技.游族网络.龙图游戏.蓝港互动.37游戏.星辉互动娱乐.博雅互动等10家知名互联网企业作为出资人(LP)的优格创投基金近日正式成立. 众所周知,伴随着移动互联网 ...

  3. C++实现矩阵求逆

    最近实现一个算法要用到求逆等矩阵运算,在网上搜到一个别人写的矩阵类,试了一下效果不错,贴在这里,做个保存. matrix.h文件: #ifndef __MATRIX_H__ #define __MAT ...

  4. HTML5新增的一些特性

    HTML现在已经不是SGML的子集,主要是关于图像,位置,储存,多任务等功能的增加. .绘画canvas: .用于媒介回放的video: Ogg是带有Theora视频编码和Vorbis音频编码的文件: ...

  5. NOIP愤怒的小鸟

    愤怒的小鸟 Description: 给你\(n<=18\)个小猪,发射的小鸟轨迹为抛物线,求最小用多少个小鸟可以将小猪全部干掉 看到n很小,我想到了搜索,于是我用\(dfs\)枚举出,每个抛物 ...

  6. Scrapy框架使用代理

    使用代理抓取https://www.baidu.com/s?wd=ip # -*- coding: utf-8 -*- ''' 一.在settings.py中开启中间件 DOWNLOADER_MIDD ...

  7. 生成ssh公有密钥而且注冊到Github Generate ssh rsa keys and register public key on Github

    私有密钥和公有密钥是成对的两个文件,私有文件保存在自己的本机,公有密钥保存到还有一端的server,站点等. github就是一种站点. 仅仅有保存了私有密钥的机器才干訪问远程的server等. 使用 ...

  8. server环境信息【C#代码获取】

    server环境信息[C#代码获取] public class ServicesMessage { [DllImport("kernel32", CharSet = CharSet ...

  9. es6 --- Generator 函数

    第一部分,ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路, ...

  10. CSS盒子模型图

    下面这张图,是W3C标准的CSS盒子模型: 由上图可以清楚的看出各个部分的CSS属性.