Исключение W / System.err: org.json.JSONException: значение может иметь тип java.lang.Строка не может быть преобразована в JSONArray

#android #json #android-volley #jsonexception

#Android #json #android-volley #исключение jsonexception

Вопрос:

Хотя на вопрос был дан ответ, но решение у меня не работает. Я использую Volley библиотеку здесь. Я также получаю ответ от сервера, но это все еще вызывает проблему. Ребята, пожалуйста, скажите мне, что я делаю не так?

Мой код:

 StringRequest stringRequest = new StringRequest(Request.Method.POST, forgetPassword_url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("response", response);
                        try {

                            JSONArray jsonArray = new JSONArray(response);
                            JSONObject jsonObject = jsonArray.getJSONObject(0);
                            String code = jsonObject.getString("code");
                            if (code.equals("mail_send")) {
                                AlertDialog.Builder builder = new AlertDialog.Builder(Signin.this);
                                builder.setCancelable(false);
                                builder.setMessage("Password will be sent to your registered email id.");
                                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //if user pressed "yes", then he is allowed to exit from application
                                        dialog.cancel();
                                        EmailText.setVisibility(View.VISIBLE);
                                    }
                                });
                                AlertDialog alert = builder.create();
                                alert.show();

                            } else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(Signin.this);
                                builder.setCancelable(false);
                                builder.setMessage("Email id is not registered.");
                                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //if user pressed "yes", then he is allowed to exit from application
                                        dialog.cancel();

                                    }
                                });
                                AlertDialog alert = builder.create();
                                alert.show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }
  

Комментарии:

1. Проверьте ваш ответ, я думаю, что это не массив json

2. Это ответ, который я получаю: [{«code»:»mail_send», «message»: «почта, отправленная на регистрационный идентификатор электронной почты», «Пароль»: «12345»}]

3. опубликовать полное исключение

4. 03-13 16:25:19.222 10109-10109/com.Dignc.texrecruit D/ответ: Не удалось выполнить: /usr/sbin/sendmail [{«code»:»mail_send», «message»: «почта, отправленная на регистрационный идентификатор электронной почты», «Пароль»:»12345″}] 03-13 16:25:19.222 10109-10109/ com.Dignc.texrecruit с системной ошибкой: org.json.JSONException: значение может иметь тип java.lang. Строка не может быть преобразована в JSONArray

Ответ №1:

Проблема в том, что ваш ответ находится в JSONArray, и вы выполняете строковый запрос.

Попробуйте этот метод blow.

 JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                Request.Method.GET,
                mJSONURLString,
                null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray jsonArray) {
                        Log.d("response", response);
                        try {

                            JSONObject jsonObject = jsonArray.getJSONObject(0);
                            String code = jsonObject.getString("code");
                            if (code.equals("mail_send")) {
                                AlertDialog.Builder builder = new AlertDialog.Builder(Signin.this);
                                builder.setCancelable(false);
                                builder.setMessage("Password will be sent to your registered email id.");
                                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //if user pressed "yes", then he is allowed to exit from application
                                        dialog.cancel();
                                        EmailText.setVisibility(View.VISIBLE);
                                    }
                                });
                                AlertDialog alert = builder.create();
                                alert.show();

                            } else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(Signin.this);
                                builder.setCancelable(false);
                                builder.setMessage("Email id is not registered.");
                                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //if user pressed "yes", then he is allowed to exit from application
                                        dialog.cancel();

                                    }
                                });
                                AlertDialog alert = builder.create();
                                alert.show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener(){
                    @Override
                    public void onErrorResponse(VolleyError error){
                        // Do something when error occurred
                        Snackbar.make(
                                mCLayout,
                                "Error...",
                                Snackbar.LENGTH_LONG
                        ).show();
                    }
                }
        );
  

Комментарии:

1. позволь мне попробовать это, брат

2. замените его на forgetPassword_url.

3. да, я понял, ошибка ушла, брат. Спасибо, приятель. можете ли вы лучше объяснить, что я делаю??

4. Проблема заключалась в том, что вы выполняете StringRequest, когда получаете JSONArray, в этом случае вам нужно выполнить запрос JSONArray, а не StringRequest. Попытайтесь понять разницу между JSONArray, JSONObject и String.

5. Теперь понял, я буду помнить об этом, спасибо, добрый день.