我有一个服务类,正在使用Volley进行Web服务调用:

public class AccountService {
    public static void forgotPassword(Context c, String emailAddress) {

        String url = "myUrl";

        JsonArrayRequest request = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        // done
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        Volley.newRequestQueue(c).add(request);

    }

}


我从这样的活动中调用它:

public class ForgotPasswordActivity extends AppCompatActivity implements View.OnClickListener{

    private void submit() {
        accountService.forgotPassword();
    }
}


当Volley请求完成时,我想更新我的活动中的UI。考虑到这是一个异步请求,我该怎么做?我可以在活动中从AccountService类调用方法吗?谢谢您的帮助

最佳答案

将侦听器对象传递给AccountService,然后将通信成功或错误发送给活动。

请按以下方法尝试(您不应将布局传递给AccountService,否则会产生一些不必要的问题)

public class ForgotPasswordActivity extends AppCompatActivity
                 implements View.OnClickListener,
                                   AccountServiceCallback{

       private void submit() {
                AccountService.forgotPassword("email@123.com", this);
       }


       @Override
       public void onClick(View v) {

       }

      @Override
      public void onResponse(JSONArray response) {
             // UPDATE UI as per on response requirement
      }

      @Override
      public void onErrorResponse(VollyError error) {
             // UPDATE UI as per response flow
      }
}

public class AccountService {

    public static void forgotPassword(Context c, String email, final
                       AccountServiceCallback callback) {

           String url = "myUrl";

           JsonArrayRequest request = new JsonArrayRequest(url,
                            new Response.Listener<JSONArray>() {
                      @Override
                      public void onResponse(JSONArray response) {
                             // done
                             callback.onResponse(response);
                      }
            }, new Response.ErrorListener() {
           @Override
           public void onErrorResponse(VolleyError error) {
                callback.onErrorResponse(error);
           }
       });

      Volley.newRequestQueue(c).add(request);

     }

   interface AccountServiceCallback {
       public void onResponse(JSONArray response);
       public void onErrorResponse(VollyError error);
   }
 }

10-08 03:14