我正在使用排球库来获取服务器的响应
我希望当来自凌空的响应接收到然后函数返回存在的boolean
值时,我已经尝试了栈上几乎所有的方法,例如wait / notify和其他方法,但是它们停止了整个执行,而凌空响应在此之后没有收到
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;
}
请帮助我。预先感谢
答案 0 :(得分:2)
由于Volley Request在不同的线程上运行,您需要知道Volley请求何时完成。只有这样,您才应该调用该方法。 为此,您可以创建一个接口,该接口将在方法完成时通知。
public interface VolleyListener{
public void requestFinished(boolean exsitance);
}
在“活动”中实施此方法会覆盖界面方法
YourActivity implements VolleyListener{
@Override
public void onCreate(Bundle savedInstanceState)
{
----- Activity code
}
----------
@Override
public void requestFinished(boolean exsitance)
{
// Do whatever you want to do
}
}
致电volleyListener.requestFinished(true);
或
volleyListener.requestFinished(false);
根据来自
排球。
这是示例代码段
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);
-------------------
}