[HTTP那些事] JSON資料,http那些事json資料

來源:互聯網
上載者:User

[HTTP那些事] JSON資料,http那些事json資料

隨著Android的發展,各路大神的貢獻,我們可用的輪子越來越多。比如HTTP請求架構,有自家的Volley,Square的okhttp, async-http-lib, 還有彙總版的xUtils以及AFinal。我想你肯定用過其中一個。

當然Stay今天不是來科普的,而是來跟大家一起思考一個問題的。我們暫且不提他們在內部做了多少最佳化,我們就說lib的返回資料。

在常用的http請求的傳回值中,檔案,JSON占絕大多數(圖片有其他架構,這裡不考慮)。檔案下載都有專門的response,會幫你下載到制定路徑,這個肯定都支援。那JSON呢?貌似都返回一個JSONObject或者JSONArray。

我去,做好事得做全啊,返回JSONObject是個什麼鬼,難道還得自己動手寫解析還原序列化成自己要得對象?那是最低級的程式員乾的事。好在我們都不傻,還有GSON,fastJson,Jackson幫我們來完成這步轉化。

比方說伺服器返回的資料:(雙引號沒加,佔位置,別噴)

{name:stay, age:17, job:soho}

對應的對象:

Class User{    public String name,    public int age,    public String job}

好,那我們只需要在response回調時拿到result,調用json-lib還原序列化就可以了,比如這樣:

User user = gson.fromJson(result, User.class)

現在我們就可以使用user對象來更新UI了對吧。就多了一行代碼,沒強迫症的也就忍過去了。

接下來我們再看下面一種json資料:

{resCode:200, data:{name:Stay, age:17, job:soho}, msg:success}{resCode:401, data:{}, msg:token invalid}

我去,這是什麼鬼,不好好遵守http協議,統一返回200是什麼鬼,token不合法給我返回401 error code不好嗎。。別說,很多公司都這麼定義返回資料的

這樣我們怎麼辦。。多寫一步解析咯。

JSONObject json = new JSONObject(result)JSONObject data = json.optJSONObject("data")if(data != null){    User user = gson.fromJson(data.toString(), User.class)}

天啊,即使沒強迫症,大概也會受不了每個API請求都寫這麼多代碼了吧。

BB了這麼多,大家應該懂我想表達什麼了吧?

為什麼不直接將json轉換成我們要的對象User再回調呢?

而且在json資料大的情況下,還原序列化還是耗時操作,有可能會卡UI的好嗎。

這可能嗎?當然可以,不然Stay鋪墊這麼多幹嘛。不過在Stay說解決方案之前,大家可以試著自己考慮下實現。

  1. 我們拿到的是String,格式是JSON

  2. 每次拿到JSON String,我們都來做了一步還原序列化對象操作

  3. gson.fromJson需要兩個參數(String JSON,Class dest)

  4. 回調參數得變成onResponse(User user)

  5. 架構層得知道Class dest

 

如果能把這些事情想清楚,你就可以很順利得擴充那些開源架構了,以後你也再不用手寫json解析了。

就說這麼多,留點時間給大家自己思考下,下面再說解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.