Android studio 如何从JSONArray获取JSONObject?
我在尝试从json数组获取json对象时遇到问题。捕获的错误表示JSONArray无法转换为JSONObject。可以有效地从web服务获取JSON响应,但我不知道如何将数组转换为对象 错误消息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"},{"
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++) {