Android之HTTP網路通信--GET傳遞(二)

来源:http://www.cnblogs.com/bingbingliang-xiaomonv/archive/2016/03/07/5248629.html
-Advertisement-
Play Games

根據上一篇寫的是實現了通過url介面將介面中的數據顯示出來,這次根據上一篇的基礎,進一步說明一下AsynTask的使用。 AsynTask類有幾個函數是大家必須知道的。 doInBackGround() onPreExecute() onPostExecute() onProgressUpdate(


  根據上一篇寫的是實現了通過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中有關的解釋我都寫在了代碼註釋中,代碼如下

 1 package com.example.httpdemo;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.TextView;
 9 
10 public class MainActivity extends Activity implements HttpDataUrlListener,OnClickListener{
11 
12     private HttpData httpdata;   
13     private TextView tx;
14     private Button butn;
15     
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         tx = (TextView)findViewById(R.id.txt);
21         butn = (Button)findViewById(R.id.btn);
22         //這個this自動識別OnClickListener介面
23         butn.setOnClickListener(this);
24         
25     }
26 
27     @Override
28     public void GetDataUrl(String data) {
29         // TODO Auto-generated method stub
30         System.out.println(data);
31         tx.setText(data);
32     }
33 
34     @Override
35     public void onClick(View v) {
36         // TODO Auto-generated method stub
37         switch (v.getId()) {
38         case R.id.btn:
39             //這個this自動識別HttpDataUrlListener介面
40             httpdata = (HttpData) new HttpData("http://www.tuling123.com/openapi/api"
41                     + "?key=66530329be6f0110bcfb8dc06a4ddfff&info=今天天氣怎麼樣"
42                     + "&loc=北京市中關村&userid=12345678",this
43                     ).execute();
44             break;
45             
46         default:
47             break;
48         }
49     }
50 
51     
52 
53 }

HttpData()中的代碼如下:

  1 package com.example.httpdemo;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.IOException;
  5 import java.io.InputStream;
  6 import java.io.InputStreamReader;
  7 
  8 import org.apache.http.HttpEntity;
  9 import org.apache.http.HttpResponse;
 10 import org.apache.http.client.ClientProtocolException;
 11 import org.apache.http.client.HttpClient;
 12 import org.apache.http.client.methods.HttpGet;
 13 import org.apache.http.impl.client.DefaultHttpClient;
 14 
 15 import android.os.AsyncTask;
 16 import android.widget.Toast;
 17 
 18 public class HttpData extends AsyncTask<String, Float, String>{
 19     
 20     //1.創建客戶端
 21     private HttpClient mhttpclient;
 22     //2。指明傳遞的方法
 23     private HttpGet mhttpget;
 24     //3.做出回應
 25     private HttpResponse mhttpresponse;
 26     //4.創建實體
 27     private HttpEntity mhttpentity;
 28     //5.使用數據流進行數據的傳輸
 29     private InputStream in;
 30     //6.創建緩衝區
 31     private BufferedReader br;
 32     //7.儲存所有的數據
 33     private StringBuffer sb;
 34     
 35     //聲明介面
 36     private HttpDataUrlListener listener;
 37     
 38     
 39     
 40     private String url;
 41     
 42     public HttpData(){
 43     }
 44     public HttpData(String url){
 45         this.url = url;
 46     }
 47     public HttpData(String url,HttpDataUrlListener listener){
 48         this.url = url;
 49         this.listener = listener;
 50     }
 51     
 52     
 53     @Override
 54     protected String doInBackground(String... params) {
 55         // TODO Auto-generated method stub
 56         
 57         try {
 58             //實例化一個客戶端
 59             mhttpclient = new DefaultHttpClient();
 60             //使用get方法進行傳遞
 61             mhttpget = new HttpGet(url);
 62             //通過客戶端進行發送
 63             mhttpresponse = mhttpclient.execute(mhttpget);
 64             //通過response方法獲取實體
 65             mhttpentity = mhttpresponse.getEntity();
 66             long total = mhttpentity.getContentLength();
 67             //通過流獲取具體的內容
 68             in = mhttpentity.getContent();
 69             //創建緩衝區
 70             br = new BufferedReader(new InputStreamReader(in));
 71             String line = null;
 72             sb = new StringBuffer();
 73             while ((line = br.readLine())!=null){
 74                 sb.append(line);
 75                 //用於顯示進度
 76                 publishProgress((float)sb.toString().length()/total);
 77             }
 78             
 79             return sb.toString();
 80         } catch (ClientProtocolException e) {
 81             // TODO Auto-generated catch block
 82             e.printStackTrace();
 83         } catch (IOException e) {
 84             // TODO Auto-generated catch block
 85             e.printStackTrace();
 86         }
 87         
 88         return null;
 89     }
 90     
 91     @Override
 92     protected void onPostExecute(String result) {
 93         // TODO Auto-generated method stub
 94         //這裡是獲取結果,將結果傳給了介面,然後使用介面進行傳遞
 95         //result也是AsyncTask中的最後一個參數
 96         listener.GetDataUrl(result);
 97         super.onPostExecute(result);
 98     }
 99     
100 
101     @Override
102     protected void onPreExecute() {
103         // TODO Auto-generated method stub
104         super.onPreExecute();
105 //        System.out.println("PreExecute");
106     }
107     
108     @Override
109     protected void onProgressUpdate(Float... values) {
110         // TODO Auto-generated method stub
111         System.out.println(values[0]);
112         super.onProgressUpdate(values);
113     }
114 
115 }

好了,上述就是我對於 AsynTask類的一些比較基本的理解,希望能夠對於你們有幫助,有什麼欠缺的地方,還望大家留言。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 接上篇博文:http://www.cnblogs.com/lance2016/p/5229073.html 上一節課給大家簡單介紹了下android撥號盤的工程概況,今天再向大家剖析一下主界面的佈局實現 先貼上主界面佈局: <?xml version="1.0" encoding="utf-8"?>
  • 什麼是UIScrollView •設備的屏幕大小是極其有限的,因此直接展示在用戶眼前的內容也相當有限 • •當展示的內容較多,超出一個屏幕時,用戶可通過滾動手勢來查看屏幕以外的內容 • •普通的UIView不具備滾動功能,不能顯示過多的內容 • •UIScrollView是一個能夠滾動的視圖控制項,可
  • 前言:本隨筆將對IOS開發的支付功能進行一個概述。 內容大綱: 一、常見的支付方案簡介 二、第三方支付SDK 三、蘋果官方支付方案 四、Web支付方案 正文: 一、常見的支付方案簡介 在微信支付中 微信支付的網址是: https://pay.weixin.qq.com/wiki/doc/api/in
  • ViewController.h #import "ViewController.h" @interface ViewController () @property(strong,nonatomic)UIImageView *beijing; @property(strong,nonatomic)
  • 1.新建一個類(.java 文件),繼承Android.app.Activity 2.新建一個activity 文件 3.重寫onCreate 方法,設置綁定activity 文件 @Override protected void onCreate(Bundle savedInstanceState
  • 如何做一名優秀的android面試官? 如何做一名優秀的android候選者? 提到這個問題我不得不提起我們小升初,初升高,高生升本這幾個歷程中我們與出題人之間的無硝煙的戰爭。我們總是為自己的成績擔心,難道現在走向社會了這個情況不見了嗎?很顯然,並沒有。那就是我們要面對的HR,這個群體負責在我們入職
  • RoboGuice是什麼? 一個Android上的依賴註入框架。 依賴註入是什麼? 從字面理解,這個框架做了兩件事情,第一是去除依賴,第二是註入依賴。簡單理解就是,將對象的初始化委托給一個容器控制器,即去除依賴,再從容器控制器中構建依賴,註入回原本的對象中,即註入依賴。 依賴註入的好處是對象不需要在
  • 現在我在做對於我們公司項目的維護,我的總體任務是 (1)拓展新功能 (2)解決bug和提升性能 (3)提高代碼的質量,主要是可維護性和可拓展性
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...