根据上一篇写的是实现了通过url接口将接口中的数据显示出来,这次根据上一篇的基础,进一步说明一下AsynTask的使用。

AsynTask类有几个函数是大家必须知道的。

  doInBackGround()

  onPreExecute()

  onPostExecute()

  onProgressUpdate()

  首先doInBackGround():必须的一个复写的方法,在doInBackGround()中主要是写的一些后天的耗时的操作,比如数据库的连接和对于服务器接口的获取。

  onPreExecute():可以写一些的提示语,他是在主线程中运行的。

  onPostExecute():执行doInBackGround()中的返回结果。

  onProgressUpdate():无返回值

   AsynTask类的三个参数的讲解,首先第一个参数是在主类中调用excute()方法的时候传递的参数。如果不需要参数的传递则将其设置为Void类型。

  第二个参数为子线程中的执行过程,它的类型和onProgressUpdate()中的类型一致。

  第三个参数为返回值的类型,和doInBackground()方法的返回值类型还有onPostExecute()中的一致。

  为了测试这个软件,我在上次的基础上加了一个按钮,点击按钮的时候就会返回Json数据, 并且还有进度的显示

  效果图如下:

 开始:

点击获取Json数据

进度条的显示我是在logcat中显示的,你也可以让其在手机上显示

这次的代码比上次有点改变,不过变化不大,我这里就只给大家贴出MainActivity和HttpData这两个类,至于接口就在上篇博文http://www.cnblogs.com/bingbingliang-xiaomonv/p/5247223.html中看吧

MainActivity中有关的解释我都写在了代码注释中,代码如下

 package com.example.httpdemo;

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity implements HttpDataUrlListener,OnClickListener{ private HttpData httpdata;
private TextView tx;
private Button butn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tx = (TextView)findViewById(R.id.txt);
butn = (Button)findViewById(R.id.btn);
//这个this自动识别OnClickListener接口
butn.setOnClickListener(this); } @Override
public void GetDataUrl(String data) {
// TODO Auto-generated method stub
System.out.println(data);
tx.setText(data);
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn:
//这个this自动识别HttpDataUrlListener接口
httpdata = (HttpData) new HttpData("http://www.tuling123.com/openapi/api"
+ "?key=66530329be6f0110bcfb8dc06a4ddfff&info=今天天气怎么样"
+ "&loc=北京市中关村&userid=12345678",this
).execute();
break; default:
break;
}
} }

HttpData()中的代码如下:

 package com.example.httpdemo;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.os.AsyncTask;
import android.widget.Toast; public class HttpData extends AsyncTask<String, Float, String>{ //1.创建客户端
private HttpClient mhttpclient;
//2。指明传递的方法
private HttpGet mhttpget;
//3.做出回应
private HttpResponse mhttpresponse;
//4.创建实体
private HttpEntity mhttpentity;
//5.使用数据流进行数据的传输
private InputStream in;
//6.创建缓冲区
private BufferedReader br;
//7.储存所有的数据
private StringBuffer sb; //声明接口
private HttpDataUrlListener listener; private String url; public HttpData(){
}
public HttpData(String url){
this.url = url;
}
public HttpData(String url,HttpDataUrlListener listener){
this.url = url;
this.listener = listener;
} @Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub try {
//实例化一个客户端
mhttpclient = new DefaultHttpClient();
//使用get方法进行传递
mhttpget = new HttpGet(url);
//通过客户端进行发送
mhttpresponse = mhttpclient.execute(mhttpget);
//通过response方法获取实体
mhttpentity = mhttpresponse.getEntity();
long total = mhttpentity.getContentLength();
//通过流获取具体的内容
in = mhttpentity.getContent();
//创建缓冲区
br = new BufferedReader(new InputStreamReader(in));
String line = null;
sb = new StringBuffer();
while ((line = br.readLine())!=null){
sb.append(line);
//用于显示进度
publishProgress((float)sb.toString().length()/total);
} return sb.toString();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
} @Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
//这里是获取结果,将结果传给了接口,然后使用接口进行传递
//result也是AsyncTask中的最后一个参数
listener.GetDataUrl(result);
super.onPostExecute(result);
} @Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
// System.out.println("PreExecute");
} @Override
protected void onProgressUpdate(Float... values) {
// TODO Auto-generated method stub
System.out.println(values[0]);
super.onProgressUpdate(values);
} }

好了,上述就是我对于 AsynTask类的一些比较基本的理解,希望能够对于你们有帮助,有什么欠缺的地方,还望大家留言。

Android之HTTP网络通信--GET传递(二)的更多相关文章

  1. Android之HTTP网络通信--GET传递

    说明 在做一个项目的时候难免会与服务器打交道,这里我就做一个小的Demo来简单的说明一下HTTP的使用,我这里使用的是图灵的接口,你也可以登陆www.tuling123.com进行申请.我使用的是上面 ...

  2. Android消息传递之组件间传递消息

    前言: 上篇学习总结了Android通过Handler消息机制实现了工作线程与UI线程之间的通信,今天来学习一下如何实现组件之间的通信.本文依然是为学习EventBus做铺垫,有对比才能进步,今天主要 ...

  3. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  4. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  5. 使用HttpURLConnection实现在android客户端和服务器之间传递对象

    一般情况下,客户端和服务端的数据交互都是使用json和XML,相比于XML,json更加轻量级,并且省流量,但是,无论我们用json还是用xml,都需要我们先将数据封装成json字符串或者是一个xml ...

  6. Android系统--输入系统(十二)Dispatch线程_总体框架

    Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个 ...

  7. Android(Lollipop/5.0) Material Design(二) 入门指南

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简介 Android(Lollipop/5.0)Material Design(二) ...

  8. Android BLE与终端通信(二)——Android Bluetooth基础科普以及搜索蓝牙设备显示列表

    Android BLE与终端通信(二)--Android Bluetooth基础搜索蓝牙设备显示列表 摘要 第一篇算是个热身,这一片开始来写些硬菜了,这篇就是实际和蓝牙打交道了,所以要用到真机调试哟, ...

  9. 【Android Studio安装部署系列】二十、Android studio如何将so文件添加到svn中

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在使用android studio的过程中,常常会遇到一个头疼的问题,添加的so,居然无法被svn添加. 选项都是灰的: 那这种问题 ...

随机推荐

  1. 配置Git自动补全功能

    Git装好后,默认是不会有按tab补全命令的功能的.可如下配置: 去git的源码中,找到contrib/completion/git-completion.bash 将git-completion.b ...

  2. 将UIWebView显示的内容转为图片和PDF

    今天开发MarkEditor时要用到将 UIWebView 中显示的内容转为图片,方便转发到各个社交网络(Twiiter,Facebook,Weibo),这样内容就不受长度限制,类似于长微博. 之前关 ...

  3. 430单片机之定时器A功能的大致介绍

    总的来说,430单片机一共有三个定时器,定时器A,定时器B,还有就是看门狗定时器,这里我们主要是讨论430单片机的定时器A的功能,定时器A的功能是我目前见过最厉害的定时器,视频上说用好定时器A的话,对 ...

  4. Python PIL创建文字图片

    PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作. 下面是我用来生成字母或字符串测试图片而写的类及测试代码. 主要用到的模块: PIL.Image,PIL.ImageDraw, ...

  5. 题目1023:EXCEL排序(多关键字+快排+尚未解决)

    http://ac.jobdu.com/problem.php?pid=1023 题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例,首先输出1行“Ca ...

  6. Mac安装wget的两种方法

    ​ 第一种.传统的安装包 A - 从ftp://ftp.gnu.org/gnu/wget/下载到最新的wget安装包到本地 B - 然后通过终端tar -zxvf命令解压到我们某个目录 C - 然后依 ...

  7. java@ LinkedList 学习

    package abc.com; import java.util.LinkedList; public class TestLinkedList { static void prt(Object o ...

  8. 初识cocos2d-x-从环境配置到整体框架

    前言 ACM生涯在带着些许遗憾中结束了.春招的时候找了一份游戏开发的工作,现在学习cocos2dx中. 从ACM竞赛到实际项目开发的学习,第一感觉就是不适应,虽然感觉实际项目的确要比ACM简单的多.最 ...

  9. Hadoop MapReduce概念学习系列之mr的Shuffle(二十二)

    Shuffle是非常非常非常重要.搞mr,必须熟烂于心. 因为,分区,分组,排序,,,都是在Shuffle里完成.

  10. A Tour of Go Maps

    A map maps keys to values. Maps must be created with make (not new) before use; the nil map is empty ...