volley get response возвращает значение типа java .lang.String невозможно преобразовать в JSONArray - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь аутентифицироваться, используя api.am, получая сообщение об ошибке, мой API возвращает следующий ответ, и я получаю следующую ошибку.

значение типа java .lang. Строка не может быть преобразована в JSONArray.

любезно помогите, я новичок ie.

это то, что возвращает мой API:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
[{"status":"True","username":"parent","schoolid":"001","category":"3","usercode":"0720994718"}]
</string>

это мой код;

RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
    //create a StringRequest
    StringRequest request = new StringRequest( Request.Method.GET,
        URL,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
        try {

            JSONArray jArray = new JSONArray(response);

            int i = 0;
            while (i < jArray.length()) {

                    JSONObject json_data = jArray.getJSONObject(i);

                    String status = json_data.getString("status");
            if (status == "True") {
                Intent intent = new Intent(LoginActivity.this, ParentActivity.class);
                startActivity(intent);
                Toast.makeText(LoginActivity.this, "logged in as " + user,
                Toast.LENGTH_LONG).show();
            } else {
                    Toast.makeText(LoginActivity.this, "wrong username or password",
                    Toast.LENGTH_LONG).show();
                    }
                i++;

                    }
                } catch (JSONException e) {
                        e.printStackTrace();
                    }
            }

            },

        new Response.ErrorListener() {
            @Override
                public void onErrorResponse(VolleyError error) {
                Toast.makeText(LoginActivity.this, "Error!!! " + error.toString(), 
                Toast.LENGTH_LONG).show();
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("username", user);
            params.put("password", pass);
            return params;
        }
    };
    //add the StringRequest to the RequestQueue
    queue.add(request);
}

Ответы [ 3 ]

0 голосов
/ 12 февраля 2020

Ваш API возвращает

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
[{"status":"True","username":"parent","schoolid":"001","category":"3","usercode":"0720994718"}]
</string>

или

[{"status":"True","username":"parent","schoolid":"001","category":"3","usercode":"0720994718"}]

?

Если первое, вы должны извлечь строку JSON из XML ответьте перед вызовом «JSONArray jArray = new JSONArray (response);», а затем сделайте что-то вроде «JSONArray jArray = new JSONArray (json_part_of_the_response);».

0 голосов
/ 12 февраля 2020

Я думаю, что ваш JSON массив находится внутри XML, поэтому вы должны сначала проанализировать XML, используя dom parser

0 голосов
/ 12 февраля 2020

меняли JSONArray jArray = new JSONArray(response); на JSONObject jObject = new JSONObject(response); и JSONObject json_data = jArray.getJSONObject(i); на String json_data = jObject(i);. Попробуйте, пожалуйста.

RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
        //create a StringRequest
        StringRequest request = new StringRequest( Request.Method.GET,
           URL,
           new Response.Listener<String>() {
               @Override
               public void onResponse(String response) {
          try {

               JSONObject jObject = new JSONObject(response);

                int i = 0;
                while (i < jArray.length()) {

                       String json_data = jObject(i);

                      String status = json_data.getString("status");
               if (status == "True") {
                   Intent intent = new Intent(LoginActivity.this, ParentActivity.class);
                   startActivity(intent);
                   Toast.makeText(LoginActivity.this, "logged in as " + user,
                    Toast.LENGTH_LONG).show();
                } else {
                      Toast.makeText(LoginActivity.this, "wrong username or password",
                      Toast.LENGTH_LONG).show();
                        }
                  i++;

                     }
                 } catch (JSONException e) {
                            e.printStackTrace();
                     }
                }

             },

           new Response.ErrorListener() {
                @Override
                 public void onErrorResponse(VolleyError error) {
                 Toast.makeText(LoginActivity.this, "Error!!! " + error.toString(), 
                    Toast.LENGTH_LONG).show();
                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("username", user);
                params.put("password", pass);
                return params;
            }
        };
        //add the StringRequest to the RequestQueue
        queue.add(request);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...