如何用截击进行循环

How to perform loop with volley

循环有问题。在我看来,这应该可行,但要经过一个循环。我必须检查可用性服务器,我没有其他想法。

服务器给出答案:

{"exist":true}

        do {
        generateNumber = generate();
        getExsistResponse = "http://skidd.herokuapp.com/exist/" + generateNumber;


            final StringRequest request = new StringRequest(Request.Method.GET, getExsistResponse, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    existObject exist = new Gson().fromJson(response, existObject.class);
                    exist.getExist();
                    String abcd = exist.getExist();
                    Boolean boolean1 = Boolean.valueOf(abcd);

                    if (boolean1) {
                        Log.i("Info", "Pokój: " + abcd);
                        textView.setText("" + boolean1);
                        Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();

                    } else {
                        textView.setText("" + boolean1);
                        Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
                    }

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //When an error
                }
            });
            ConnectionManager.getInstance(this).add(request);
            //Add the request to the RequestQueue.
        }while (boolean1);

这是我的 existObject class:

public class existObject {

@SerializedName("exist")
private String checkexist;

public String getExist() {
    return checkexist;
}
public void getExist(String name) {
    this.checkexist = name;
}

}

这种方法的逻辑并不合理。您已经假设 do-while 循环在每个 Web 服务调用完成后检查 boolean1 的值。实际上,发生的情况是甚至在第一个 Web 服务调用完成之前,do-while 循环已经进入循环的下一次迭代,并且 boolean1 可能仍然是 false,因为第一个网络服务调用尚未完成。所以 do-while 循环中断。

意识到这一点:网络服务调用是异步。您根本无法预测需要多少时间才能完成,而且每次 Web 服务调用完成所需的时间总是会有所不同。另一方面,您的 do-while 循环是 同步的 :它不断创建 StringRequest 对象并将它们添加到 RequestQueue,并且这些请求不会立即执行,因此 boolean1 的值可能已正确设置,也可能未正确设置 do-while 循环的下一次迭代。

你需要找到另一种方式来进行连续的网络调用,这样它们就不会以这种方式相互依赖。如果你仍然想这样做并依赖于 boolean1,试试这个:

  • 创建 AsyncTask 并执行 HttpURLConnection 请求(以及 在其 doInBackground() 中不是 Volley Request) 并设置值 boolean1 那里。
  • 如果boolean1的值为true,则创建一个新的实例 onPostExecute() 中的相同 AsyncTask 并调用 execute() 到 开始下一个网络服务调用。