1d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/* 2d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project 3d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 4d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 5d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * you may not use this file except in compliance with the License. 6d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * You may obtain a copy of the License at 7d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 8d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 9d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 10d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 11d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 12d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * See the License for the specific language governing permissions and 14d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * limitations under the License. 15d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 16d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 17d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupackage com.android.volley; 18d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 19d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/** 20d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Encapsulates a parsed response for delivery. 21d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 22d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * @param <T> Parsed type of this response 23d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 24d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupublic class Response<T> { 25d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 26d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Callback interface for delivering parsed responses. */ 27d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public interface Listener<T> { 28d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Called when a response is received. */ 29d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public void onResponse(T response); 30d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 31d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 32d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Callback interface for delivering error responses. */ 33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public interface ErrorListener { 34d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** 35d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Callback method that an error has been occurred with the 36d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * provided error code and optional user-readable message. 37d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 38d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public void onErrorResponse(VolleyError error); 39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 41d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Returns a successful response containing the parsed result. */ 42d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public static <T> Response<T> success(T result, Cache.Entry cacheEntry) { 43d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru return new Response<T>(result, cacheEntry); 44d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 45d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 46d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** 47d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Returns a failed response containing the given error code and an optional 48d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * localized message displayed to the user. 49d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 50d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public static <T> Response<T> error(VolleyError error) { 51d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru return new Response<T>(error); 52d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 53d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 54d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Parsed response, or null in the case of error. */ 55d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public final T result; 56d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 57d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Cache metadata for this response, or null in the case of error. */ 58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public final Cache.Entry cacheEntry; 59d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 60d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** Detailed error information if <code>errorCode != OK</code>. */ 61d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public final VolleyError error; 62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** True if this response was a soft-expired one and a second one MAY be coming. */ 64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public boolean intermediate = false; 65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 66d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** 67d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Returns whether this response is considered successful. 68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public boolean isSuccess() { 70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru return error == null; 71d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 74d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private Response(T result, Cache.Entry cacheEntry) { 75d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru this.result = result; 76d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru this.cacheEntry = cacheEntry; 77d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru this.error = null; 78d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 79d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 80d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private Response(VolleyError error) { 81d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru this.result = null; 82d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru this.cacheEntry = null; 83d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru this.error = error; 84d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 85d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru} 86