【问题标题】:wait for volley response and then return value from function等待凌空响应,然后从函数返回值
【发布时间】:2019-06-17 21:44:03
【问题描述】:

我正在使用 volley 库从服务器获取响应
我希望当来自 volley 的响应收到然后函数返回存在 boolean 值时,我已经尝试了几乎所有堆栈溢出方法,如等待/通知等,但它们停止整个执行并且在那之后没有收到 volley 响应

boolean exsitance= false;

public  boolean checkUserExist(final String id, final String email)
{

  try {
      RequestQueue requestQueue = Volley.newRequestQueue(context);
      JSONObject jsonBody = new JSONObject();
      if (id != null)
        jsonBody.put("id", id);
      if (email != null)
        jsonBody.put("email", email);
      final String mRequestBody = jsonBody.toString();

      StringRequest stringRequest = new StringRequest(Request.Method.POST, UrlConstants.checkUserExsist, new Response.Listener<String>() {
         @Override
         public void onResponse(String response) {
             Log.i("LOG_RESPONSE", response);
             exsitance = true;

            Toast.makeText(context, "user  exsist", Toast.LENGTH_SHORT).show();
        }
     }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {

            try {
                if (error.networkResponse.statusCode == 400) {
                    Toast.makeText(context, "user not exsist" + error.networkResponse.statusCode, Toast.LENGTH_SHORT).show();

                    exsitance = false;

                }
            } catch (Exception e) {

            }
        }
      }) {
         @Override
         public String getBodyContentType() {
            return "application/json; charset=utf-8";
         }

         @Override
         public byte[] getBody() throws AuthFailureError {
             try {
                return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                return null;
             }
         }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
                Log.d("statuscode_volley", responseString);

            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };

    requestQueue.add(stringRequest);
} catch (JSONException e) {
    e.printStackTrace();
}

    return exsitance;
}

请帮助我。提前致谢

【问题讨论】:

    标签: android android-volley delay


    【解决方案1】:

    Volley 在不同的线程上运行

    由于 Volley 请求在不同的线程上运行,您需要知道 Volley 请求何时完成。只有这样你才应该调用该方法。 为此,您可以创建一个接口,该接口将在方法完成时发出通知。

    public interface VolleyListener{
    
        public void requestFinished(boolean exsitance);
    
    }
    

    在Activity中实现该方法覆盖接口方法

    YourActivity implements VolleyListener{   
    
      @Override
      public void onCreate(Bundle savedInstanceState)
      {
             ----- Activity code
      }
    
      ----------
      @Override
      public void requestFinished(boolean exsitance)
      {
         // Do whatever you want to do
      }
    
    }
    

    如何从 Volley Request 中调用接口方法?

    • 对 Volleylistener 进行类型转换
    • 致电volleyListener.requestFinished(true);volleyListener.requestFinished(false); 基于来自的回复 Volley。
      这是一个示例 sn-p

      public  boolean checkUserExist(final String id, final String email)
      {
         ------------------
      
         VolleyListener volleyListener = (VolleyListener)context;
      
         @Override
         public void onResponse(String response) {
          volleyListener.requestFinished(true);
         }
         }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
      
          volleyListener.requestFinished(false);
      
         -------------------
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多