Android Volley onResponse не выполняется :( - PullRequest
0 голосов
/ 27 сентября 2019

Я хотел бы проверить существование пользователя и вернуть результат, однако onResponse () не реализуется перед возвратом isUserExist, кто-нибудь может посоветовать, как это исправить?:)

// Check existence of email address
private boolean verifyEmail(String email) {
    isUserExist = false;

    loginURL = Uri.parse(loginURL).buildUpon()
            .appendQueryParameter("email",email)
            .build().toString();

    GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
            new Response.Listener<StaffUser>() {
                @Override
                public void onResponse(StaffUser response) {
                    if (response != null) {
                        Log.i(TAG, "staffUserId: " + response.getStaffUserId());
                        isUserExist = true;
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO: Handle error
            Log.e(TAG, "VolleyError: " + error);
        }
    }
    );

    // Access the RequestQueue through your singleton class.
    MySingleton.getInstance(this).addToRequestQueue(gsonRequest);

    return isUserExist;
}

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы должны создать интерфейс и передать список для метода verifyEmail, который обеспечивает проверку ответа в методе обратного вызова.

Добавить интерфейс для обратного вызова

public interface VerifyEmailListner {
    void onResponse(boolean success);
}

изменить ваш метод следующим образом, установить void returnвведите вместо логического

private void verifyEmail(String email,final VerifyEmailListner listner) {
    isUserExist = false;

    loginURL = Uri.parse(loginURL).buildUpon()
            .appendQueryParameter("email",email)
            .build().toString();

    GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
            new Response.Listener<StaffUser>() {
                @Override
                public void onResponse(StaffUser response) {
                    if (response != null) {
                        Log.i(TAG, "staffUserId: " + response.getStaffUserId());
                        listner.onResponse(true);
                        isUserExist = true;
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO: Handle error
            Log.e(TAG, "VolleyError: " + error);
            listner.onResponse(false);
            isUserExist = false;
        }
    }
    );
    // Access the RequestQueue through your singleton class.
    MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
}

вызов метода, подобного этому

  verifyEmail("abc@gmail.com",new VerifyEmailListner () {
        public void onResponse(boolean success){
            if(success){
                // verified
            } else{
              // not verified
            }
        }
    });
0 голосов
/ 27 сентября 2019

Вы должны использовать listener для обнаружения ответа, потому что Volly равен Асинхронный

https://developer.android.com/training/volley

  • Сильный порядок, который облегчаетправильно заполняйте свой пользовательский интерфейс данными, извлекаемыми из сети асинхронно.

Таким образом, вы должны использовать listener handle responce, посмотрите, как это сделать

  public class MyCustomListnerObject {
      // Step 1 - This interface defines the type of messages I want to communicate to my owner  
      public interface MyCustomObjectListener {
          // These methods are the different events and 
          // need to pass relevant arguments related to the event triggered
          public void onObjectReady(String title);
          // or when data has been loaded
          public void onDataLoaded(SomeData data);
      }

    private MyCustomObjectListener listener;

  // Constructor where listener events are ignored
    public MyCustomObject() {
        // set null or default listener or accept as argument to constructor
        this.listener = null; 
    }

    // Assign the listener implementing events interface that will receive the events
    public void setCustomObjectListener(MyCustomObjectListener listener) {
        this.listener = listener;
    }
    }

, затем ваш Volly

  // Check existence of email address
    private void verifyEmail(String email) {
        isUserExist = false;

        loginURL = Uri.parse(loginURL).buildUpon()
                .appendQueryParameter("email",email)
                .build().toString();

        GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
                new Response.Listener<StaffUser>() {
                    @Override
                    public void onResponse(StaffUser response) {
                        if (response != null) {
                            Log.i(TAG, "staffUserId: " + response.getStaffUserId());
                         if (listener != null)
                      listener.onDataLoaded(data); // <---- fire listener here
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO: Handle error
listener.onDataLoaded(data); // <---- fire listener here
                Log.e(TAG, "VolleyError: " + error);
            }
        }
        );

        // Access the RequestQueue through your singleton class.
        MySingleton.getInstance(this).addToRequestQueue(gsonRequest);


    }

Как создать правильный прослушиватель залпа для вызова метода волейбола кросс-класса

...