package com.dpt.tbase.app.net;
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkError;
import com.android.volley.NetworkResponse;
import com.android.volley.NoConnectionError;
import com.android.volley.ServerError;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
public class VolleyErrorHelper {
public final static String ERROR_SERVER_DOWN="ERROR_SERVER_DOWN";
public final static String ERROR_NO_INTERNET="ERROR_NO_INTERNET";
public final static String ERROR_OTHERS="ERROR_OTHERS";
/**
* Returns appropriate message which is to be displayed to the user
* against the specified error object.
*
* @param error
* @param context
* @return
*/
public static String getMessage(Object error, Context context) {
if (error instanceof TimeoutError) {
return ERROR_SERVER_DOWN;
}
else if (isServerProblem(error)) {
return handleServerError(error, context);
}
else if (isNetworkProblem(error)) {
return ERROR_NO_INTERNET;
}
return ERROR_OTHERS;
}
/**
* Determines whether the error is related to network
*
* @param error
* @return
*/
private static boolean isNetworkProblem(Object error) {
return (error instanceof NetworkError) || (error instanceof NoConnectionError);
}
/**
* Determines whether the error is related to server
*
* @param error
* @return
*/
private static boolean isServerProblem(Object error) {
return (error instanceof ServerError) || (error instanceof AuthFailureError);
}
/**
* Handles the server error, tries to determine whether to show a stock message or to
* show a message retrieved from the server.
*
* @param err
* @param context
* @return
*/
private static String handleServerError(Object err, Context context) {
VolleyError error = (VolleyError) err;
NetworkResponse response = error.networkResponse;
if (response != null) {
switch (response.statusCode) {
case 404:
case 422:
case 401:
try {
// server might return error like this { "error": "Some error occured" }
// Use "Gson" to parse the result
// HashMap<String, String> result = new Gson().fromJson(new String(response.data), new
// TypeToken<Map<String, String>>() {}.getType());
// if (result != null && result.containsKey("error")) {
// return result.get("error");
// }
} catch (Exception e) {
e.printStackTrace();
}
// invalid request
return error.getMessage();
default:
return ERROR_NO_INTERNET;
}
}
return ERROR_OTHERS;
}
}