Android/Java: how to delay return in a method

后端 未结 3 1847
抹茶落季
抹茶落季 2020-11-30 15:02

I want to build a Utils class to make Volley calls simpler, like this:

Utils.java:

public class Utils {
static JsonObjectRequest mJsonObjectRequest;          


        
3条回答
  •  离开以前
    2020-11-30 15:04

    I created this and managed like the following way please have a look, hope it will be useful to you

    public class APIManager {
    
    
    
        public static void createRequest(Context c, String requestTag,
                String endPoint, List params,
                final OnRequestCompletedListener listener,
                TransParentProgressDialog pd) {
            ServerDetails serverDetails = new ServerDetails(c, endPoint, params);
            JsonObjectRequest request = new JsonObjectRequest(Method.GET,
                    serverDetails.getQueryUrl(), null,
                    new Response.Listener() {
    
                        @Override
                        public void onResponse(JSONObject response) {
                            listener.onRequestCompleted(response);
                        }
                    }, getErrorListener(c, pd)) {
    
            };
            AppController.getInstance().addToRequestQueue(request, requestTag);
        }
    
    public static ErrorListener getErrorListener(final Context c,
                final TransParentProgressDialog pd, final TextView tvEmpty,
                final String errorText) {
    
            Response.ErrorListener listener = new Response.ErrorListener() {
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (pd != null && pd.isShowing()) {
                        pd.dismiss();
                    }
                    if (tvEmpty != null) {
                        tvEmpty.setText(errorText);
                    }
                    MyDialog dialog;
                    Log.d("volley-error", error.toString());
    
                    if (error instanceof TimeoutError) {
                        dialog = new MyDialog(c, "Server Timeout");
                        dialog.show();
                        return;
                    } else if (error instanceof NoConnectionError) {
                        dialog = new MyDialog(c, "No Connection or Invalid Url");
                        dialog.show();
                        return;
    
                    } else if (error instanceof ServerError) {
                        NetworkResponse response = error.networkResponse;
                        if (response != null) {
                            // int statusCode = response.statusCode;
                            byte[] data = response.data;
                            if (data != null) {
                                String str = new String(data);
                                try {
                                    JSONObject object = new JSONObject(str);
                                    Log.d("error response", object.toString());
                                    if (object.has("errors")) {
                                        JSONArray errors = object
                                                .getJSONArray("errors");
                                        JSONObject errorObject = errors
                                                .getJSONObject(0);
                                        dialog = new MyDialog(c, "Error!",
                                                errorObject.getString("message"));
                                        dialog.show();
                                    } else {
                                        dialog = new MyDialog(c, "Error!",
                                                object.toString());
                                        dialog.show();
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                    dialog = new MyDialog(c, "Error!", "Error");
                                    dialog.show();
                                }
                            } else {
                                dialog = new MyDialog(c, "Server Error");
                                dialog.show();
                            }
                        } else {
                            dialog = new MyDialog(c, "Server Error");
                            dialog.show();
                        }
    
                    } else if (error instanceof NetworkError) {
                        NetworkResponse response = error.networkResponse;
                        if (response != null) {
                            // int statusCode = response.statusCode;
                            byte[] data = response.data;
                            if (data != null) {
                                String str = new String(data);
                                try {
                                    JSONObject object = new JSONObject(str);
                                    Log.d("error response", object.toString());
                                    if (object.has("errors")) {
                                        JSONArray errors = object
                                                .getJSONArray("errors");
                                        JSONObject errorObject = errors
                                                .getJSONObject(0);
                                        dialog = new MyDialog(c, "Error!",
                                                errorObject.getString("message"));
                                        dialog.show();
                                    } else {
                                        dialog = new MyDialog(c, "Error!",
                                                object.toString());
                                        dialog.show();
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                    dialog = new MyDialog(c, "Error!", "Error");
                                    dialog.show();
                                }
                            } else {
                                dialog = new MyDialog(c, "Network Error");
                                dialog.show();
                            }
                        } else {
                            dialog = new MyDialog(c, "Network Error");
                            dialog.show();
                        }
                    } else if (error instanceof ParseError) {
                        dialog = new MyDialog(c, "Parse Error");
                        dialog.show();
                    } else if (error instanceof AuthFailureError) {
                        NetworkResponse response = error.networkResponse;
                        if (response != null) {
                            // int statusCode = response.statusCode;
                            byte[] data = response.data;
                            if (data != null) {
                                String str = new String(data);
                                try {
                                    JSONObject object = new JSONObject(str);
                                    Log.d("error response", object.toString());
                                    if (object.has("errors")) {
                                        JSONArray errors = object
                                                .getJSONArray("errors");
                                        JSONObject errorObject = errors
                                                .getJSONObject(0);
                                        dialog = new MyDialog(c, "Error!",
                                                errorObject.getString("message"));
                                        dialog.show();
                                    } else {
                                        dialog = new MyDialog(c, "Error!",
                                                object.toString());
                                        dialog.show();
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                    dialog = new MyDialog(c, "Error!", "Error");
                                    dialog.show();
                                }
                            } else {
                                dialog = new MyDialog(c, "Error!", "Error");
                                dialog.show();
                            }
                        } else {
                            dialog = new MyDialog(c, "Error connecting server");
                            dialog.show();
                        }
                    }
                }
            };
            return listener;
        }
    }
    

    And the interface for call back on request completed is

    public interface OnRequestCompletedListener {
    
            public void onRequestCompleted(JSONObject response);
        }
    

提交回复
热议问题