我的问题是关于我的iPhone设备和代号模拟器(NetBeans)上的一个奇怪的行为。
我调用下面的代码调用google web服务来提供GPS坐标周围的食物位置列表:
调用的Web服务如下(KEY OBSCURED):
每个结果都包含下一页令牌,因此第二次调用(对于后续页面)如下:
public static byte[] getWSResponseData(String urlString, boolean usePost)
{
ConnectionRequest r = new ConnectionRequest();
r.setUrl(urlString);
r.setPost(usePost);
InfiniteProgress prog = new InfiniteProgress();
Dialog dlg = prog.showInifiniteBlocking();
r.setDisposeOnCompletion(dlg);
NetworkManager.getInstance().addToQueueAndWait(r);
try
{
Thread.sleep(2000);
}
catch (InterruptedException ex)
{
}
byte[] responseData = r.getResponseData();
return responseData;
}
public static void getLocationsList(double lat, double lng)
{
boolean done = false;
while (!done)
{
byte[] responseData = getWSResponseData(finalURL,false);
result = Result.fromContent(parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(responseData))));
String venueNames[] = result.getAsStringArray("/results/name");
nextToken = result.getAsString("/next_page_token");
if ( nextToken == null || nextToken.equals(""))
done = true;
else
finalURL = completeURL + "&pagetoken=" + nextToken;
}
.....
}
此代码适用于睡眠计时器,但是当我删除Thread.sleep时,只会调用第一页。
任何帮助将不胜感激。
使用调试器没有帮助,因为这是一个计时问题,使用调试器时不会发生此问题。
当我在代码中放入一些打印语句时
while (!done)
{
String nextToken = null;
**System.out.println(finalURL);**
...
}
System.out.println("Total Number of entries returned: " + itemCount);
我得到以下输出:
使用网络监视器,我看到对第二个WS调用的响应返回:
{
"html_attributions" : [],
"results" : [],
"status" : "INVALID_REQUEST"
}
这很奇怪,因为当我将WS URL剪切并粘贴到我的浏览器中时,它工作正常......
第二次跑步(休眠):
答案 0 :(得分:1)
好吧,这似乎是一个谷歌API问题,如下所示:
Paging on Google Places API returns status INVALID_REQUEST
我仍然无法通过他们建议的随机参数更改WS URL来使其工作,但如果我让它工作,我将继续尝试并发布一些内容。现在我只会在看似有效的通话之间保持2秒的延迟。
答案 1 :(得分:0)
很好地放弃了使用谷歌WS并切换到Yelp,效果很好: