Запрос залпа JSONArray должен быть распознан, если он был пуст - PullRequest
1 голос
/ 27 мая 2019

Я использую Volley для получения JSON из удаленного скрипта PHP.Иногда массив 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 не отображается, и видимость счетчика не исчезла, как ожидалось.

Как мне изменить свой код, чтобы запустить Toast и установить видимость счетчика GONE, когда полученный массив JSON пуст?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Вы должны внести некоторые изменения в ваш код, например:

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);
1 голос
/ 27 мая 2019
  • public void onResponse(String 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();
    }
}
...