package net.kornan.framework.network; import android.content.Context; import android.content.res.Resources; 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 { /** * 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) { Resources res=context.getResources(); if (error instanceof TimeoutError) { return res.getString(res.getIdentifier("generic_server_down","string",context.getPackageName())); // return context.getResources().getString( // R.string.generic_server_down); } else if (isServerProblem(error)) { return handleServerError(error, context); } else if (isNetworkProblem(error)) { // return context.getResources().getString(R.string.no_internet); String packageName=context.getPackageName(); int resId=res.getIdentifier("no_internet","string",packageName); return res.getString(resId); } return res.getString(res.getIdentifier("generic_error","string",context.getPackageName())); // return context.getResources().getString(R.string.generic_error); } /** * 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) { Resources res=context.getResources(); 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 context.getResources().getString(R.string.generic_server_down); return res.getString(res.getIdentifier("generic_server_down", "string", context.getPackageName())); } } return res.getString(res.getIdentifier("generic_error", "string", context.getPackageName())); // return context.getResources().getString(R.string.generic_error); } }