Android之HTTP网络通信--GET传递(二)
2016-03-07 17:30
597 查看
根据上一篇写的是实现了通过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中有关的解释我都写在了代码注释中,代码如下
HttpData()中的代码如下:
好了,上述就是我对于 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类的一些比较基本的理解,希望能够对于你们有帮助,有什么欠缺的地方,还望大家留言。
相关文章推荐
- iOS9后https不能请求问题解决的办法之一
- 实现TCP连接的AT指令
- jmeter测试https
- Android网络请求框架之Retrofit(一)
- 四、网络编程-读写函数
- Linux 网络编程 基本服务器-客户端
- HTTP协议简介
- 计算机网络面试题
- 偷师饿了么:怎样用HTTP/2优化iOS APP网络层次架构?
- iOS安全系列之:HTTPS
- TCP三次握手与四次挥手
- 发送HTTP请求
- Android 本地加载网页&显示网络图片
- http://blog.csdn.net/yejin191258966/article/details/8453909 java中Statement详细用法。
- 使用HttpClient和WebRequest时POST一个对象的写法
- Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse
- VMware-网络连接不成功问题
- Gerrit配置(http+postgresql+nginx)
- MVC 部署出错 ,HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。
- 使用HttpClient和WebRequest时POST一个对象的写法