на клике слушатель работает во второй клик - PullRequest
0 голосов
/ 18 мая 2018

У меня есть кнопка, и в onClick () код возвращает результат.

Моя проблема заключается в первом щелчке по этой кнопке, результат равен null, во втором щелчке она возвращает true.

Я не знаю почему.

Этот код:

 JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, ur, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        jsonArray = response.getString("referentiel");
                        Log.d(TAG, "onResponse() returned: kkkkkk" + jsonArray);


                        //for (int i = 0; i < jsonArray.length(); i++) {
                        //JSONObject employee = jsonArray.getJSONObject(i);

                        String firstName = jsonArray.toString();
                        // Toast.makeText(ActivityUserProfile.this, "ok"+firstName, Toast.LENGTH_LONG).show();

                        // int age = employee.getInt("age");
                        // String mail = employee.getString("mail");

                        // mTextViewResult.append(jsonArray + ", " +"\n\n");
                        //}
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    mQueue.add(request);
    Toast.makeText(MainActivity.this, "ok"+jsonArray, Toast.LENGTH_LONG).show();

}
  }

результат jsonArray переменная

1 Ответ

0 голосов
/ 18 мая 2018

JsonObjectRequest - асинхронный запрос.он будет работать в другом потоке, отличном от основного потока.Так что используйте ответ внутри onResponse().т.е. переместить тост внутрь onResponse().Выполните всю дальнейшую обработку данных внутри методов обратного вызова запроса.Волейбольные обратные вызовы выполняются в главном потоке, поэтому вы можете напрямую обращаться к элементам пользовательского интерфейса в методах обратного вызова.

 JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, ur, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            // Handle Response here 
                            jsonArray = response.getString("referentiel");
                            Toast.makeText(MainActivity.this, "ok" + jsonArray, Toast.LENGTH_LONG).show();

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                // handle error here
            }
        });
           mQueue.add(request);
...