Как обработать строковый ответ от php с помощью Android-залпа JsonObjectRequest [com.android.volley.ParseError: org.json.JSONException]? - PullRequest
0 голосов
/ 14 мая 2018

На самом деле, когда мы вызываем API и отправляем запрос в формате JSON, мы ожидаем, что ответ также придет в формате JSON.Но здесь команда бэкэнда посылает мне ответ в формате String, поэтому вызывается мой метод onErrorResponse ().Здесь мой код состояния 200. Но из-за формата ответа не выполняется метод onResponse ().Так, пожалуйста, помогите мне справиться с этим?Может быть, я должен использовать CustomRequest здесь.Любое предложение будет оценено.Спасибо

Я использовал запрос объекта volley json для доступа к серверу.

Мой формат запроса:

JSONObject json1 = new JSONObject();

try{
json1.put("","");
}catch(JSONException e){
e.printStackTrace();
}

new SampleJsonObjTask(MainActivity.this, json1);

и мой SampleJsonObjTask класс:

public class SampleJsonObjTask {
    public static ProgressDialog progress;
    private static RequestQueue queue;
    JSONObject main;
    JsonObjectRequest req;
    private MainActivity context;
    public SampleJsonObjTask(MainActivity context, JSONObject main) {

        progress = new ProgressDialog(context);
        progress.setMessage("Loading...");
        progress.setCanceledOnTouchOutside(false);
        progress.setCancelable(false);
        progress.show();
        this.context = context;
        this.main = main;
        ResponseTask();
    }

    private void ResponseTask() {
        if (queue == null) {
            queue = Volley.newRequestQueue(context);
        }
        req = new JsonObjectRequest(Request.Method.POST, "", main,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        progress.dismiss();
                        Log.e("response","response--->"+response.toString());

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("error", "error--->" + error.toString());
                NetworkResponse response = error.networkResponse;
                Log.e("statusCode","statusCode--->"+response.statusCode);
                String json = null;
                if (response != null && response.data != null) {
                    switch (response.statusCode) {
                        case 400:
                            break;

                        case 401:
                            json = new String(response.data);
                            break;
                        case 502:
                            json = new String(response.data);
                            break;
                        case 200:
                            json = new String(response.data);
                            break;
                    }
                    progress.dismiss();
                }
            }
        })

        {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Content-Type", "application/json");
                return params;
            }
        };
        req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 1f));
        queue.add(req);

    }}

Здесь ответ идет как строковый формат, значение которого ОК. Пожалуйста, помогите мне узнать, как получить строковый ответ, о котором я упоминал ниже.

com.android.volley.ParseError: org.json.JSONException: Value OK of type java.lang.String cannot be converted to JSONObject

Как получить этот строковый ответ, используя объектный запрос json.

1 Ответ

0 голосов
/ 14 мая 2018
RequestQueue queue = Volley.newRequestQueue(context);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        dialog.cancel();
                        Log.d("response", response);
                    }catch (Exception e){
                        volleyResponseCallBack.onFailure("Something went wrong!");
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    String message = null;
                    dialog.cancel();

                    if (volleyError instanceof NetworkError) {
                        message = "Cannot connect to Internet...Please check your connection!";
                    } else if (volleyError instanceof ServerError) {
                        message = "The server could not be found. Please try again after some time!!";
                    } else if (volleyError instanceof AuthFailureError) {
                        message = "Cannot connect to Internet...Please check your connection!";
                    } else if (volleyError instanceof ParseError) {
                        message = "Parsing error! Please try again after some time!!";
                    } else if (volleyError instanceof NoConnectionError) {
                        message = "Cannot connect to Internet...Please check your connection!";
                    } else if (volleyError instanceof TimeoutError) {
                        message = "Connection TimeOut! Please check your internet connection.";
                    }

                    if (!(message == null)) {
                        Log.d("response", message);
                    }
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json");
            return params;
        }
    };


    stringRequest.setRetryPolicy(new DefaultRetryPolicy(
            0,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.add(stringRequest);
...