我有循环问题。在我看来,这应该工作,但是通过循环。我必须检查可用性服务器,但我没有其他想法。
服务器给出答案:
{"存在":真}
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;
}
}
答案 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
,则创建一个新实例
AsyncTask
中onPostExecute()
的{{1}},并致电execute()
开始下一次网络服务电话。