<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > 編寫:[kesenhoo](https://github.com/kesenhoo) - 原文:[http://developer.android.com/training/volley/request-custom.html](http://developer.android.com/training/volley/request-custom.html) 這節課會介紹如何實現你自定義的請求類型,這些自定義的類型不屬于Volley內置支持包里面。 ### Write a Custom Request 大多數的請求類型都已經包含在Volley的工具箱里面。如果你的請求返回數值是一個string,image或者JSON,那么你是不需要自己去實現請求類的。 對于那些你需要自定義的請求類型,你需要執行以下操作: - 繼承`Request<T>`類,`<T>`表示請求返回的數據類型。因此如果你需要解析的響應類型是一個String,可以通過繼承`Request<String>`來創建你自定義的請求。請參考Volley工具類中的StringRequest與 ImageRequest來學習如何繼承Request。 - 實現抽象方法`parseNetworkResponse()`與`deliverResponse()`,下面會詳細介紹。 ### parseNetworkResponse 為了能夠提交一種指定類型的數據(例如,string,image,JSON等),需要對解析后的結果進行封裝。下面會演示如何實現`parseNetworkResponse()`。 ~~~ @Override protected Response<T> parseNetworkResponse( NetworkResponse response) { try { String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } // handle errors ... } ~~~ 請注意: - `parseNetworkResponse()`的參數是類型是`NetworkResponse`,這種參數包含了的響應數據內容有一個byte[],HTTP status code以及response headers. - 你實現的方法必須返回一個Response,它包含了你響應對象與緩存metadata或者是一個錯誤。 如果你的協議沒有標準的cache機制,你可以自己建立一個`Cache.Entry`, 但是大多數請求都可以用下面的方式來處理: ~~~ return Response.success(myDecodedObject, HttpHeaderParser.parseCacheHeaders(response)); ~~~ Volley在工作線程中執行parseNetworkResponse()方法。這確保了耗時的解析操作,例如decode一張JPEG圖片成bitmap,不會阻塞UI線程。 ### deliverResponse Volley會把parseNetworkResponse()方法返回的數據帶到主線程的回調中。如下所示: ~~~ protected void deliverResponse(T response) { listener.onResponse(response); ~~~ ### Example: GsonRequest [Gson](http://code.google.com/p/google-gson/)是一個使用映射支持JSON與Java對象之間相互轉換的庫文件。你可以定義和JSON keys相對應名稱的Java對象。把對象傳遞給傳遞Gson,然后Gson會幫你為對象填充字段值。 下面是一個完整的示例:演示了使用Gson解析Volley數據: ~~~ public class GsonRequest<T> extends Request<T> { private final Gson gson = new Gson(); private final Class<T> clazz; private final Map<String, String> headers; private final Listener<T> listener; /** * Make a GET request and return a parsed object from JSON. * * @param url URL of the request to make * @param clazz Relevant class object, for Gson's reflection * @param headers Map of request headers */ public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; } @Override public Map<String, String> getHeaders() throws AuthFailureError { return headers != null ? headers : super.getHeaders(); } @Override protected void deliverResponse(T response) { listener.onResponse(response); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success( gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } } ~~~ 如果你愿意使用的話,Volley提供了現成的`JsonArrayRequest`與`JsonArrayObject`類。參考上一課[創建標準的網絡請求](#)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看