Как сохранить ответ в переменной в Volley? - PullRequest
1 голос
/ 04 октября 2019

Я хочу сохранить ответ Volley в переменной Public, но когда я вытолкаю его, запрос залпа возвращает ноль

public  JSONArray array ;
String URL = "http://192.168.1.104/json.php";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);

        array = new JSONArray();

        JsonArrayRequest request = new JsonArrayRequest( URL,new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

               try {
                    array = response;
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        Volley.newRequestQueue(this).add(request);

Toast.makeText(json.this, array.toString(),Toast.LENGTH_LONG).show();

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Как уже говорили, вызов инициации Toast в onResponse () работает, но лучший способ справиться с этим - лучший - создать небольшой интерфейс слушателя или метод, который вызывается в onResponse и реализуется там, где вам нужно. это.

Я бы также настоятельно рекомендовал только передавать данные, которые вам нужны , и сохранять их в классе модели, а не просто сохранять отклик прямо.

оченьпростой пример будет

String URL = "http://192.168.1.104/json.php";

   // make sure your class implements this
   public  interface ResponseListener {
      public gotResponse(JSONArray array);
   }

   // implementation of ResponseListener
   public gotResponse(JSONArray array) {
      // eventually do more with this data
      Toast.makeText(json.this, array.toString(),Toast.LENGTH_LONG).show();
   }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);

        ResponseListener listener = this;

        JsonArrayRequest request = new JsonArrayRequest( URL,new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

               try {
                    listener.gotResponse(response);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        Volley.newRequestQueue(this).add(request);

0 голосов
/ 05 октября 2019

Одним способом может быть перемещение строки:

Toast.makeText(json.this, array.toString(),Toast.LENGTH_LONG).show();

точно на строку после: array = response;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...