简体   繁体   中英

handle 2 different error response for success and failer retrofit2

My current success response is this:

{"status":"success","message":"msg here"}

with code 200

And my error response is this:

{"status":"failure","message":"There was a validation error","errors":{"shippingAddress":{"phoneNumber":"Please enter a valid phone number"}}}

with code 400

my problem is the code below is not working because it always go inside onFailure()

        if (response.isSuccessful()) {
            // do something

        } else if (response.code() == 400) {
            Gson gson = new Gson();
            ErrorPhone message = null;
            if (response.errorBody() != null) {
                message = gson.fromJson(response.errorBody().charStream(), ErrorPhone.class);
            }
            if (message != null) {
                Toast.makeText(context, message.getErrors().getShippingAddress().getPhoneNumber(), Toast.LENGTH_LONG).show();
            } else {
                String errors = "";
                try {
                    JSONObject jObjError = new JSONObject(response.errorBody().string());
                    errors = jObjError.getJSONObject("errors").getJSONObject("shippingAddress").getString("phoneNumber");
                } catch (JSONException | IOException e) {
                    e.printStackTrace();
                }
                if (!errors.equals("")) {
                    Toast.makeText(context, errors, Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(context, response.message(), Toast.LENGTH_LONG).show();
                }
            }
        }

and inside onFailure i cant listen to errorBody to handle the response

Use Retrofit interface called onResponse and place your code there. As Retrofit uses two different callback methods for the two possible outcomes of a network requests: either a failure or a successful request. Retrofit will call the appropriate callback method depending on the result. If the request was successful, Retrofit will also pass you the response of the server.

For more view this link: https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.html and https://futurestud.io/tutorials/java-basics-for-retrofit-callbacks that will help you more to learn about retrofit Call-backs

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM