国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android客戶端獲取服務器的json數(shù)據(jù)(二)

 這一周課很多,所以沒有及時的接上。

現(xiàn)在的我不打算再拼命的做碼農(nóng)了,而是盡量的做總結(jié)。把以前寫過的一些代碼回憶一下,把以前有過的思路再重新尋覓一回。似乎,我好多廢話。

在做Android應用程序開發(fā)時,有很多應用都會獲取由Web Server返回的數(shù)據(jù),有的可能是xml數(shù)據(jù),有可能是json數(shù)據(jù)。他們各有應用范圍。我繼續(xù)總結(jié)一下獲取網(wǎng)絡json數(shù)據(jù)的一些idea。這里先分析一下業(yè)務邏輯,UI稍后再嘮叨。

1.分析一下手機購物應用的執(zhí)行過程。

首次執(zhí)行一個MainActivity,此activity的功能是構(gòu)成main UI(即下方有個Tab 菜單),由于我的沒個Activity都是繼承了上文中的IMActivity接口,這里實現(xiàn)初始化init()方法。我們都知道Activity的生命周期,所以我在onResume()方法里調(diào)用init()方法。并且,初始化方法完成幾個任務。

  1.1 檢查網(wǎng)絡連接

    android系統(tǒng)有提供檢測網(wǎng)絡的api。我們可以很方便的調(diào)用。我們可以把檢查網(wǎng)絡的方法封裝在一個工具類里(可根據(jù)自己的programing style)

  

package com.mpros.util;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;/*** * 工具類,檢查當前網(wǎng)絡狀態(tài) *  * @author shuimu *  */public class NetUtil {    public static boolean checkNet(Context context) {        // 獲取手機所以連接管理對象(包括wi-fi,net等連接的管理)        ConnectivityManager conn = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        if (conn != null) {            // 網(wǎng)絡管理連接對象            NetworkInfo info = conn.getActiveNetworkInfo();                        if(info != null && info.isConnected()) {                // 判斷當前網(wǎng)絡是否連接                if (info.getState() == NetworkInfo.State.CONNECTED) {                    return true;                }            }                    }        return false;    }}

 

  1.2如果網(wǎng)絡連接正常,啟動服務Service。否則提醒用戶網(wǎng)絡連接異常。網(wǎng)絡連接異常的方法,我封裝在了MainService中,可以直接invoke。

    

    @Override    protected void onResume() {        super.onResume();        init();    }    @Override    public void init() {        if (NetUtil.checkNet(this)) {            Intent startService = new Intent("com.mpros.service.MainService");            this.startService(startService);        } else {            MainService.alerNetErr(this);        }    }

  

2.當MainActivity執(zhí)行到onResume()方法時,會啟動服務。正常情況下,MainService開始執(zhí)行onCreate()方法。此方法里,啟動線程,因為我的MainService是實現(xiàn)了Runnbale接口的。

View Code

3.于是,后臺服務框架正常搭建起來了。子線程一直在獲取任務,只要有任務的時候,取走任務,然后就執(zhí)行任務。

  run方法:

View Code

4.插敘一下Handler。

  在每個Acitivity和Service主線程下,有一個Handler對象負責線程通信,消息傳遞,更新UI。(我是這么理解的)。通常采用異步實現(xiàn)網(wǎng)絡通信,通過Handler來做數(shù)據(jù)媒介,然后把數(shù)據(jù)顯示在界面上來。

  主要涉及Message對象和handMessage(Message msg)方法。有時候還常用Handler對象的postXXX(Runnable run)方法。此方法有幾個重載方法。就是加入一個Runnable(api:Represents a command that can be executed,表示可執(zhí)行的命令)到Handler對象的附屬子線程隊列里。

5.理一下doTask(Task task)方法。

  5.1先瞧瞧系統(tǒng)要執(zhí)行的任務Task

  

View Code

  這里我聲明成了原生類型了,但在Java里,在使用HashMap或者Map,常常會涉及泛型,如:Map<?,?> map ;

  5.2 首先創(chuàng)建一個消息對象

  Message msg = new Message();

  5.3 賦予消息的標識,這里把任務編號賦予它。

  msg.what = task.getTaskId();

  5.4 通過switch語句,根據(jù)任務ID分別執(zhí)行任務。具體代碼上文已貼了。

6.在點擊獲取產(chǎn)品分類時,會轉(zhuǎn)至相應分類的Activity。在初始化方法里,老規(guī)矩先檢查網(wǎng)絡,然后新建任務,該任務表示獲取產(chǎn)品分類。

 

View Code

7.MainService會馬上收到任務,然后調(diào)用doTask方法。根據(jù)編號,執(zhí)行獲取產(chǎn)品分類任務。

View Code

8.封裝通過Http獲取請求響應(HttpResponse)以及通過一個圖片的URL,然后返回一張位圖(BitmapDrawable)的工具類HttpUtil.

View Code

9.解析json數(shù)據(jù)的業(yè)務。

  通過HttpUtil獲取一個HttpResponse.

  HttpResponse response = HttpUtil.getHttpResponse(action);//在瀏覽器里輸入此action,瀏覽器里可顯示一串json數(shù)據(jù)。

  測試響應碼

  // 響應code
    int rescode = response.getStatusLine().getStatusCode();如果rescode 為200,表示獲取ok.

  然后通過response.getEntity().getContent();方法返回獲取的所有數(shù)據(jù),在轉(zhuǎn)化為StringBuffer變長字串。再根據(jù)字段來解析。

View Code

10.在執(zhí)行獲取產(chǎn)品類型時,正常的話會返回解析好的產(chǎn)品類型對象列表list。然后通過handler對象傳遞該list,根據(jù)任務id去更新UI。

 

View Code

11.在ClassifyActivity里實現(xiàn)refresh方法。

  

View Code

12.執(zhí)行一個任務的邏輯順序就是這樣了,

  通過UI新建任務  ---> 后臺服務獲取任務并執(zhí)行任務 ---> 通過相應的方法獲取的數(shù)據(jù) ---> Hanlder傳遞數(shù)據(jù) ---> 返回原來的UI ---> UI是否更新.

有時間會再補充我覺得比較有用的UI設計。

 

 

 

 

 

 

 

 

  

 

 

 

    

 

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《Android項目式程序設計》12 網(wǎng)絡編程寫字字帖
詳解Android中AsyncTask的使用
關于AsyncTask與Handler
android AsyncTask介紹
Android 多線程編程的總結(jié)
AsyncTask和Handler兩種異步方式的實現(xiàn)和區(qū)別比較
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服