volley get response返回类型为java.lang.String的值,无法转换为JSONArray

问题描述 投票:0回答:1

我正在尝试使用api.am进行身份验证,但响应出现错误,我的api返回以下响应,并出现以下错误。

java.lang.String类型的值不能转换为JSONArray。

请帮忙,是个新手。

这是我的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);
}
java android arrays api android-volley
1个回答
0
投票

我将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);
    }

0
投票

您的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"}]

[如果是第一个,则应在调用“ JSONArray jArray = new JSONArray(response);”之前从XML答案中提取JSON字符串,然后执行类似“ JSONArray jArray = new JSONArray(json_part_of_the_response);”。

© www.soinside.com 2019 - 2024. All rights reserved.