Android studio 如何从JSONArray获取JSONObject?

Android studio 如何从JSONArray获取JSONObject?,android-studio,android-volley,Android Studio,Android Volley,我在尝试从json数组获取json对象时遇到问题。捕获的错误表示JSONArray无法转换为JSONObject。可以有效地从web服务获取JSON响应,但我不知道如何将数组转换为对象 错误消息 org.json.JSONException: Value [{"codaspirante":"1","nombre":"Saul","apellido":"Goodman","mail":"sg@g.com","telefono":"012034948123","codusuario":"0"},{"

我在尝试从json数组获取json对象时遇到问题。捕获的错误表示JSONArray无法转换为JSONObject。可以有效地从web服务获取JSON响应,但我不知道如何将数组转换为对象

错误消息

org.json.JSONException: Value [{"codaspirante":"1","nombre":"Saul","apellido":"Goodman","mail":"sg@g.com","telefono":"012034948123","codusuario":"0"},{"codaspirante":"2","nombre":"Lalo","apellido":"Salamanca","mail":"ls@g.com","telefono":"12351233","codusuario":"10"},{"codaspirante":"3","nombre":"Walter","apellido":"White","mail":"ww@g.com","telefono":"54843439","codusuario":"10"},{"codaspirante":"4","nombre":"Gustavo","apellido":"Frings","mail":"gf@g.com","telefono":"845738848434","codusuario":"10"}] at 0 of type org.json.JSONArray cannot be converted to JSONObject
方法:

 private void buscarCandidatos_Serivicio(String URL){
  JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, URL, null, new Response.Listener<JSONArray>() {
      @Override
      public void onResponse(JSONArray response) {
          try {
              for (int i = 0; i < response.length(); i++) {
                  JSONObject candidato = response.getJSONObject(i);

                  Candidato c = new Candidato(
                          candidato.getInt("codaspirante"),
                          candidato.getString("nombre"),
                          candidato.getString("apellido"),
                          candidato.getString("mail"),
                          candidato.getString("telefono"),
                          candidato.getInt("codusuario")
                          );
                  listaCandidatos.add(c);
              }

          } catch (JSONException e) {
              Toast.makeText(getApplicationContext(), e.getMessage().toString(), Toast.LENGTH_SHORT).show();
          }
      }
  }, new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {
          Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
      }
  }
  );

    RequestQueue rq= Volley.newRequestQueue(this);
    rq.add(jsonArrayRequest);
}
private void buscarCandidateos_Serivicio(字符串URL){
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(Request.Method.POST,URL,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
试一试{
对于(int i=0;i
val stringRequest=对象:stringRequest(
Request.Method.POST,Config.“您的URL”,
Response.Listener{Response->
试一试{
val obj=JSONObject(响应)
如果(!obj.getBoolean(“错误”)){
val usersslistary=obj.getJSONArray(“arrayname”)
for(在userssListArray.length()之前,0中的i){
var usersObj=usersslistary.getJSONObject(i)
}
}否则{
如果(obj.getString(“消息”)=“您的登录已过期,请重新登录”){
val intent=intent(这是LoginActivity::class.java)
星触觉(意图)
完成()
}
}
}捕获(e:JSONException){
e、 printStackTrace()
}
},
Response.ErrorListener{
Toast.makeText(此“网络错误重试…”,Toast.LENGTH\u LONG.show()
}) {
@抛出(AuthFailureError::类)
重写fun getParams():映射{
val params=HashMap()
返回参数
}
}
stringRequest.retryPolicy=DefaultRetryPolicy(
15000,
DefaultRetryPolicy.DEFAULT\u最大重试次数,
DefaultRetryPolicy.DEFAULT\u BACKOFF\u MULT)
//将请求添加到队列
VolleySingleton.instance?.addToRequestQueue(stringRequest)

您可以像这样使用截击,错误是因为response.getJSONObject(0)返回的是JSONArray而不是JSONObject

我猜您想从该数组中获取数据。 在On-response方法中,应该添加response=response.getJSONArray(0)

public void onResponse(JSONArray响应){
试一试{
response=response.getJSONArray(0);
对于(inti=0;i

这应该可以解决您的问题。

您的响应是以数组的形式出现的,但您正在将其转换为jsonobject
  val stringRequest = object : StringRequest(
            Request.Method.POST, Config."your URL",
            Response.Listener<String> { response ->
                try {

                    val obj = JSONObject(response)

                    if (!obj.getBoolean("error")) {

                        val userssListArray = obj.getJSONArray("arrayname")

                        for (i in 0 until userssListArray.length()) {
                            var usersObj = userssListArray.getJSONObject(i)

                        }


                    } else {

                        if (obj.getString("message") == "Your login expired please re login") {
                            val intent = Intent(this, LoginActivity::class.java)
                            startActivity(intent)
                            finish()
                        }
                    }
                } catch (e: JSONException) {
                    e.printStackTrace()
                }
            },
            Response.ErrorListener {
                Toast.makeText(this, "Network Error Try Again...", Toast.LENGTH_LONG).show()

            }) {
        @Throws(AuthFailureError::class)
        override fun getParams(): Map<String, String> {
            val params = HashMap<String, String>()

            return params
        }
    }
    stringRequest.retryPolicy = DefaultRetryPolicy(
            15000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)
    //adding request to queue
    VolleySingleton.instance?.addToRequestQueue(stringRequest)
    public void onResponse(JSONArray response) {
      try {
          response = response.getJSONArray(0);
          for (int i = 0; i < response.length(); i++) {