首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载

http://download.csdn.net/detail/xujinyang1234/5767419

测试的Activity,用到了RequstClient,LoadCacheResponseLoginouthandler,LoadDatahandler三个重写的类

package com.example.asynchttpclienttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView; import com.loopj.android.http.RequestParams; public class MainActivity extends Activity {
private TextView test; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
} private void init() {
test = (TextView) findViewById(R.id.test);
System.out.println("拉拉");
RequestParams param = new RequestParams();
param.put("id", 1 + "");
RequstClient.get(
"http://58.192.23.75:8080/xiaoxiao2/ColumnServletAndroid",
param, new LoadCacheResponseLoginouthandler(MainActivity.this,
new LoadDatahandler() {
@Override
public void onStart() {
super.onStart();
test.setText("开始拉去数据");
} @Override
public void onSuccess(String data) {
super.onSuccess(data);
test.setText(data);
System.out.println("拉倒的数据" + data);
} @Override
public void onFailure(String error, String message) {
super.onFailure(error, message);
test.setText("错误的数据" + message);
} @Override
public void onFinish() {
super.onFinish();
}
}));
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

RequstClient.java

package com.example.asynchttpclienttest;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams; public class RequstClient {
/**
* 定义一个异步网络客户端 默认超时未20秒 当超过,默认重连次数为5次 默认最大连接数为10个
*/
private static AsyncHttpClient mClient = new AsyncHttpClient();
static {
mClient.setTimeout(20000);
}
public static void post(String url, AsyncHttpResponseHandler handler) {
post(url, null, handler);
}
/**
* post 请求
*
* @param url
* API 地址
* @param params
* 请求的参数
* @param handler
* 数据加载句柄对象
*/
public static void post(String url, RequestParams params,
AsyncHttpResponseHandler handler) {
System.out.println("进入post");
mClient.post(url, params, handler);
}
public static void get(String url, AsyncHttpResponseHandler handler) { }
public static void get(String url, RequestParams params,
AsyncHttpResponseHandler handler) {
System.out.println("进入get");
mClient.get(url, params, handler);
}
}
package com.example.asynchttpclienttest;

import org.apache.http.Header;

import android.content.Context;

import com.loopj.android.http.AsyncHttpResponseHandler;

public class LoadCacheResponseLoginouthandler extends AsyncHttpResponseHandler {
private Context context;
private LoadDatahandler mHandler; public LoadCacheResponseLoginouthandler(Context context,
LoadDatahandler mHandler) {
this.context = context;
this.mHandler = mHandler;
}
@Override
public void onStart() {
super.onStart();
mHandler.onStart();
}
@Override
public void onFailure(Throwable error, String content) {
super.onFailure(error, content);
mHandler.onFailure("", "网络连接超时");
}
@Override
public void onFinish() {
super.onFinish();
mHandler.onFinish();
} @Override
public void onSuccess(int statusCode, Header[] headers, String content) {
super.onSuccess(statusCode, headers, content);
System.out.println("得到的返回码" + statusCode);
try {
switch (statusCode) {
case 200:
mHandler.onSuccess(content);
System.out.println("返回的内容" + content);
break;
case 401:
onFailure("401", "没有登录"); break;
case 403:
onFailure("404", "没有权限");
break;
default:
break;
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 出错
*
* @param error
* @param errorMessage
*/
public void onFailure(String error, String errorMessage) {
if (errorMessage != null) {
mHandler.onFailure(error, errorMessage);
}
}
}

接口:

package com.example.asynchttpclienttest;

public class LoadDatahandler {
/**
* 加载数据时调用
*/
public void onStart() {};
/**
* 加载数据调用,得到缓存数据
* @param data
*/
public void onLoadCaches(String data) {};
/**
* 当调用服务器接口成功获取数据时,调用这个方法
* @param data
*/
public void onSuccess(String data) {}; /**
* 当调用服务器接口获取数据失败时,调用这个方法
* @param error 出错原因
* @param message 出错原因描述
*/
public void onFailure(String error, String message) {};
/**
* 加载完成时调用
*/
public void onFinish() {}; }

Android应用中使用AsyncHttpClient来异步网络数据的更多相关文章

  1. Android应用中使用AsyncHttpClient来异步网络数据(转载)

    摘要: 首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测 ...

  2. 【转】Android应用中使用AsyncHttpClient来异步网络数据

    摘要: 首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测 ...

  3. IOS9中使用NSURLConection发送异步网络请求

    IOS9中使用NSURLConection发送异步网络请求 在ios9中,NSURLConection的sendSync..和sendAsync已经过时.被NSURLSession代替. 以下蓝色部分 ...

  4. Android利用tcpdump和wireshark抓取网络数据包

    Android利用tcpdump和wireshark抓取网络数据包 主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次 ...

  5. Android之MVP模式实现登录和网络数据加载

    MVP简介 相信大家对 MVC 都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP作为MVC的演化版本,也是作为用户界面(用户层)的实现模式,那么类似的 ...

  6. 如何从Linux系统中获取带宽、流量网络数据

    引入 国外的云主机厂商,例如AWS提供的网络数据是以流量为单位的,例如下面的图片: 从上图来看,其取值方式为 每隔5分钟取值1次,(每次)每个点显示为1分钟内的流量字节数(Bytes) 带宽与流量 我 ...

  7. Android架构:用消息机制获取网络数据

    网络请求,不管是什么协议,是长连接还是短连接,总是一个异步的请求,过程包括:加请求参数->发起请求->接收响应->解析数据->获得业务数据. 最挫的做法是,业务代码包揽所有这些 ...

  8. ajax中的同步与异步修改数据的问题

    这次项目中因为前端有事儿,项目紧急加个新需求,于是自己硬着头皮上去看了下前端的逻辑后便开始动手了,但是为了简单起见就直接自己写了个ajax调服务来获取数据,然后修改前端定义的全局数据 //ajax来请 ...

  9. 项目中使用的ajax异步读取数据结构设计

    设计稍微复杂了一点,完成ajax读取功能涉及到了很多页面.虽然如此,但感觉比较灵活. 和传统方法唯一的区别在于多了一层数据容器控件,里面提供了显示数据的HTML元素及相应的JS方法. 这样数据控件指生 ...

随机推荐

  1. 第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  2. java压缩zip文件中文乱码问题(转——作者:riching)

    本人遇到了同样的问题,用了以下方案,奇迹般的解决了.我很纳闷为什么,经理说:好读书,不求甚解,不要问为什么... 用java来打包文件生成压缩文件,有两个地方会出现乱码 1.内容的中文乱码问题,这个问 ...

  3. protobuf-net-data

    protobuf-net http://www.codeproject.com/Articles/642677/Protobuf-net-the-unofficial-manual https://g ...

  4. 1.1 什么是LinQ

    如今,软件应用环境越来越多样化,软件需要处理的数据量也日渐庞大,数据之间的关系日渐复杂.从而带动了存储技术的不断发展,越来越多的数据存储格式被应用到各种软件中. 通常,针对数据的查询是用简单的字符串文 ...

  5. UC编程:输入输出重定向(系统调用)

    在Unix下,系统重定向是使用dup和dup2函数完成的 在学习使用这两个函数之前,必须要搞懂一个概念就是文件描述符 摘自:<文件描述符和文件指针的区别> 文件描述符就是open文件时产生 ...

  6. Visual Studio 2012使用水晶报表Crystal Report

    原文:Visual Studio 2012使用水晶报表Crystal Report SAP在 2013年1月14日 released SAP Crystal Reports,developer ver ...

  7. EnterpriseLibrary 6.0(微软企业库6.0学习笔记) 之Data Access Block 配置和获取链接字符串

    EnterpriseLibrary 的特点是快速开发,融合了微软工程师多年的经验,现在在微软内部有专门的一个小组在完善EnterpriseLibray,最近的更新时间是April 2013. 相关链接 ...

  8. js 计算过去和未来的时间距离现在多少天?

    计算传入的任意一时间.计算出这个时间距离现在还有多少天!或者计算过去的时间距离现在已经过去了多少天! 返回值有两种! 1.负值 代表过去了多少天 2.正值 代表距离设定的时间还有多少天 说明:距离设定 ...

  9. cocos2d-x3.0 经常使用绘图方法

    HelloWorldScene.h 例如,下面的代码被添加: protected: void onDraw(const kmMat4 &transform, bool transformUpd ...

  10. 使用jquery.form异步提交注意jquery.validate需要手动添加验证

    使用jquery.form.js异步提时,即使jquery.validate验证失败也会提交的所以加个$("form").valid()来判断是否通过验证: $("#fo ...