如何用齐射执行循环

时间:2015-02-28 14:39:59

标签: java android json android-volley

我有循环问题。在我看来,这应该工作,但是通过循环。我必须检查可用性服务器,但我没有其他想法。

服务器给出答案:

  

{"存在":真}

        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);

这是我的existsObject类:

public class existObject {

@SerializedName("exist")
private String checkexist;

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

}

1 个答案:

答案 0 :(得分:1)

这种方法的逻辑不合理。您假设do-while循环在每次Web服务调用完成后检查boolean1的值。实际上,即使在第一次Web服务调用完成之前,do-while循环已经转移到循环的下一次迭代,boolean1可能仍然是假的,因为第一次网络服务电话尚未完成。所以do-while循环中断了。

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

您需要找到另一种进行连续网络呼叫的方式,这样它们就不会以这种方式相互依赖。如果您仍然希望这样做并依赖于boolean1,请尝试以下操作:

  • 创建AsyncTask并执行HttpURLConnection请求(和 在Request中不是排球doInBackground()),并设置值 boolean1那里。
  • 如果boolean1的值为true,则创建一个新实例 AsyncTaskonPostExecute()的{​​{1}},并致电execute() 开始下一次网络服务电话。