Volley 请求 JSONArray 如果为空则应被识别
Volley request JSONArray should be recognized if it was empty
我正在使用 Volley 从远程 PHP 脚本获取 JSON。
有时,JSON 数组为空。
这是我的代码:
StringRequest stringRequest=new StringRequest(Request.Method.GET, HI, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject=new JSONObject(response);
JSONArray array=jsonObject.getJSONArray("data");
for (int i=0; i<array.length(); i++ ){
JSONObject ob=array.getJSONObject(i);
Notificacion listData=new Notificacion(ob.getString("id_notificacion")
,ob.getString("texto"),
ob.getString("fecha"),
ob.getString("nombre"),
ob.getString("nombre")+" "+ob.getString("apellidos"),
ob.getString("profesor"),
ob.getString("tutor"),
ob.getString("estado"),
ob.getString("envia_tutor"),
ob.getString("envia_profesor")
);
list_data.add(listData);
spinner.setVisibility(View.GONE);
}
rv.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("arry","array lengt error:"+error);
Toast.makeText(getActivity(),
"No tienes notificaciones.", Toast.LENGTH_LONG)
.show();
spinner.setVisibility(View.GONE);
}
});
RequestQueue requestQueue= Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
如果 JSON 数组为空,则我收到响应侦听器消息说 data[] 为空,但 Toast 未显示,微调器可见性也没有按预期消失。
当收到的 JSON 数组为空时,我应该如何更改我的代码以启动 Toast 并将微调器可见性设置为 GONE?
public void onResponse(String response)
表示请求get response成功,解析成功,但是这个回调不代表数据值不为空!
public void onErrorResponse(VolleyError error)
表示请求没有得到响应,可能是错误的http代码,或者请求成功但解析失败。
因此,如果您希望在请求成功但 data array
为空时执行某些操作,您应该在 public void onResponse(String response)
方法中添加一个逻辑来检查 successfully response
但数据为空的情况
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray array = jsonObject.getJSONArray("data");
if (array == null || array.length() == 0) {
//data array is empty
// add the logic you want
} else {
//data array not empty
for (int i = 0; i < array.length(); i++) {
JSONObject ob = array.getJSONObject(i);
Notificacion listData = new Notificacion(ob.getString("id_notificacion")
, ob.getString("texto"),
ob.getString("fecha"),
ob.getString("nombre"),
ob.getString("nombre") + " " + ob.getString("apellidos"),
ob.getString("profesor"),
ob.getString("tutor"),
ob.getString("estado"),
ob.getString("envia_tutor"),
ob.getString("envia_profesor")
);
list_data.add(listData);
spinner.setVisibility(View.GONE);
}
rv.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
您应该像这样对代码进行一些更改:
StringRequest stringRequest=new StringRequest(Request.Method.GET, HI, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject=new JSONObject(response);
JSONArray array=jsonObject.getJSONArray("data");
if (array.length()==0){
Toast.makeText(getActivity(),
"No tienes notificaciones.", Toast.LENGTH_LONG)
.show();
spinner.setVisibility(View.GONE);
}else{
for (int i=0; i<array.length(); i++ ){
JSONObject ob=array.getJSONObject(i);
Notificacion listData=new Notificacion(ob.getString("id_notificacion")
,ob.getString("texto"),
ob.getString("fecha"),
ob.getString("nombre"),
ob.getString("nombre")+" "+ob.getString("apellidos"),
ob.getString("profesor"),
ob.getString("tutor"),
ob.getString("estado"),
ob.getString("envia_tutor"),
ob.getString("envia_profesor")
);
list_data.add(listData);
spinner.setVisibility(View.VISIBLE);
}
rv.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
spinner.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("arry","array lengt error:"+error);
spinner.setVisibility(View.GONE);
}
});
RequestQueue requestQueue= Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
我正在使用 Volley 从远程 PHP 脚本获取 JSON。 有时,JSON 数组为空。
这是我的代码:
StringRequest stringRequest=new StringRequest(Request.Method.GET, HI, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject=new JSONObject(response);
JSONArray array=jsonObject.getJSONArray("data");
for (int i=0; i<array.length(); i++ ){
JSONObject ob=array.getJSONObject(i);
Notificacion listData=new Notificacion(ob.getString("id_notificacion")
,ob.getString("texto"),
ob.getString("fecha"),
ob.getString("nombre"),
ob.getString("nombre")+" "+ob.getString("apellidos"),
ob.getString("profesor"),
ob.getString("tutor"),
ob.getString("estado"),
ob.getString("envia_tutor"),
ob.getString("envia_profesor")
);
list_data.add(listData);
spinner.setVisibility(View.GONE);
}
rv.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("arry","array lengt error:"+error);
Toast.makeText(getActivity(),
"No tienes notificaciones.", Toast.LENGTH_LONG)
.show();
spinner.setVisibility(View.GONE);
}
});
RequestQueue requestQueue= Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
如果 JSON 数组为空,则我收到响应侦听器消息说 data[] 为空,但 Toast 未显示,微调器可见性也没有按预期消失。
当收到的 JSON 数组为空时,我应该如何更改我的代码以启动 Toast 并将微调器可见性设置为 GONE?
public void onResponse(String response)
表示请求get response成功,解析成功,但是这个回调不代表数据值不为空!public void onErrorResponse(VolleyError error)
表示请求没有得到响应,可能是错误的http代码,或者请求成功但解析失败。
因此,如果您希望在请求成功但 data array
为空时执行某些操作,您应该在 public void onResponse(String response)
方法中添加一个逻辑来检查 successfully response
但数据为空的情况
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray array = jsonObject.getJSONArray("data");
if (array == null || array.length() == 0) {
//data array is empty
// add the logic you want
} else {
//data array not empty
for (int i = 0; i < array.length(); i++) {
JSONObject ob = array.getJSONObject(i);
Notificacion listData = new Notificacion(ob.getString("id_notificacion")
, ob.getString("texto"),
ob.getString("fecha"),
ob.getString("nombre"),
ob.getString("nombre") + " " + ob.getString("apellidos"),
ob.getString("profesor"),
ob.getString("tutor"),
ob.getString("estado"),
ob.getString("envia_tutor"),
ob.getString("envia_profesor")
);
list_data.add(listData);
spinner.setVisibility(View.GONE);
}
rv.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
您应该像这样对代码进行一些更改:
StringRequest stringRequest=new StringRequest(Request.Method.GET, HI, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject=new JSONObject(response);
JSONArray array=jsonObject.getJSONArray("data");
if (array.length()==0){
Toast.makeText(getActivity(),
"No tienes notificaciones.", Toast.LENGTH_LONG)
.show();
spinner.setVisibility(View.GONE);
}else{
for (int i=0; i<array.length(); i++ ){
JSONObject ob=array.getJSONObject(i);
Notificacion listData=new Notificacion(ob.getString("id_notificacion")
,ob.getString("texto"),
ob.getString("fecha"),
ob.getString("nombre"),
ob.getString("nombre")+" "+ob.getString("apellidos"),
ob.getString("profesor"),
ob.getString("tutor"),
ob.getString("estado"),
ob.getString("envia_tutor"),
ob.getString("envia_profesor")
);
list_data.add(listData);
spinner.setVisibility(View.VISIBLE);
}
rv.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
spinner.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("arry","array lengt error:"+error);
spinner.setVisibility(View.GONE);
}
});
RequestQueue requestQueue= Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);