3

我正在使用 Android 中的 Google 电子表格 API。我已成功完成集成并能够检索行。但在搜索功能方面遇到了一点问题。我对电子表格有 3-4 种不同的搜索。问题是在我的电子表格中的某些列中,我的单词之间有空格。

例如,Hello World 是第 5 行中的一个值,并且该行的标题名称是 test。

因此,当我搜索Hello World时,它会抛出InValidEntryException : Bad Request。

我也尝试使用 URLEncoder.encode(String url) 并将空格替换为 %20。但这些都不适合我。我知道我因为空间而收到错误,但不知道如何解决。尝试了这 2 件事,但仍在努力解决错误。

如果有人有任何想法,请提供帮助。下面是错误日志。

错误日志:-

10-09 14:26:29.048: I/System.out(1009): URL ==> https://spreadsheets.google.com/feeds/list/tl5vghRJs8_wuVQWnk5TnhA/od6/private/full?sq=streetname=bal%20bay
10-09 14:26:30.327: D/dalvikvm(1009): GC_CONCURRENT freed 439K, 46% free 3492K/6407K, external 920K/1417K, paused 18ms+14ms
10-09 14:26:31.847: I/System.out(1009): Service
10-09 14:26:31.877: W/System.err(1009): com.google.gdata.util.InvalidEntryException: Bad Request
10-09 14:26:31.887: W/System.err(1009): Parse error: null
10-09 14:26:31.967: W/System.err(1009):     at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:602)
10-09 14:26:32.217: W/System.err(1009):     at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
10-09 14:26:32.228: W/System.err(1009):     at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
10-09 14:26:32.228: W/System.err(1009):     at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
10-09 14:26:32.228: W/System.err(1009):     at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
10-09 14:26:32.228: W/System.err(1009):     at com.google.gdata.client.Service.getFeed(Service.java:1135)
10-09 14:26:32.228: W/System.err(1009):     at com.google.gdata.client.Service.getFeed(Service.java:998)
10-09 14:26:32.237: W/System.err(1009):     at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:645)
10-09 14:26:32.259: W/System.err(1009):     at com.google.gdata.client.Service.getFeed(Service.java:1017)
10-09 14:26:32.259: W/System.err(1009):     at com.test.voter.SearchActivity$SearchTask.doInBackground(SearchActivity.java:144)
10-09 14:26:32.259: W/System.err(1009):     at com.test.voter.SearchActivity$SearchTask.doInBackground(SearchActivity.java:1)
10-09 14:26:32.259: W/System.err(1009):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
10-09 14:26:32.278: W/System.err(1009):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
10-09 14:26:32.287: W/System.err(1009):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
10-09 14:26:32.287: W/System.err(1009):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-09 14:26:32.312: W/System.err(1009):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
10-09 14:26:32.312: W/System.err(1009):     at java.lang.Thread.run(Thread.java:1019)

编辑

1)URL listFeedUrl = new  URI(worksheet.getListFeedUrl().toString() + "?sq=" + URLEncoder.encode("streetname=\"164Th\"")).toURL(); 

2)URL listFeedUrl = new  URI(worksheet.getListFeedUrl().toString() + "?sq=" + URLEncoder.encode("streetnumber=\"1923\"%20and%20streetname=\"164Th\"")).toURL();

(1) 工作得很好,但是当使用多个参数 (2) 时它不起作用,再次给出相同的 InvalidEntryException。

4

2 回答 2

3

或者您可以在问题列表中搜索问题 2308并注意评论 3:

如果您只是将名称括在引号中,则可以正常工作。您甚至可以在此处在列名中使用空格。

https://spreadsheets.google.com/feeds/ ${KEY}/records/0?sq="5B"+%3D+3 https://spreadsheets.google.com/feeds/ ${KEY}/records/ 0?sq="the+cat"+%3D+3

...并希望记录提要中未记录的内容实际上已在列表提要中实施,尽管稍后会过渡到“WontFix”状态。

于 2012-10-09T15:14:53.870 回答
1

好吧,现已失效的GData 2.0 协议指南(也在wayback machine 上)关于“q”参数说:

列出以空格分隔的搜索词,格式为 q=term1 term2 term3。(与所有查询参数值一样,空格必须经过 URL 编码)

然而,defunct-so-much-as-to-be-unpublished-anymore-by-Google Spreadsheets Data API 3.0 参考指南有点简单,其中包含有关列表提要特定“sq”参数的参数的信息。

我可能会尝试将搜索词用引号括起来“像这样”(并对它们进行 URL 编码)。这就是“q”参数用于分隔整个短语的技术。

如果这不起作用,我会提交一份问题报告,抱怨文档不足。请随意引用我之前的投诉

于 2012-10-09T14:56:37.383 回答