Getting Error in retrieving data from Google Spreadsheet API using Structure Query (sq) in Android

走远了吗. 提交于 2019-11-30 18:20:20

问题


I am working with Google Spreadsheet API in Android. I am successfully done with the integration and able to retrieve the rows. But facing a little problem in search functionality. I am having 3-4 different search for the spreadsheet. The problem is that in my spreadsheet in some columns I am having space between words.

For e.g Hello World is a value in row number 5 and the header name for this row is let say test.

So when i search for the Hello World it is throwing InValidEntryException : Bad Request.

I also try with URLEncoder.encode(String url) and also replace the space with %20. But none of that work for me. I know i am getting the error because of the space but don't know how to resolve. Tried with this 2 things but still struggling with the error.

If anyone has any idea please kindly help. Below is the error log.

Error Log :-

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)

EDIT

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) Works perfectly fine but when used multiple parameter (2) it does not work, giving the same InvalidEntryException again.


回答1:


Or you could search the issues list for issue 2308 and notice comment 3:

if you just wrap the name in quotes, it works fine. You can even use spaces in your column names here.

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

... and hope that what was not documented in respect of the records feed was actually implemented in respect of the list feed, despite the transition to a 'WontFix' status later.




回答2:


Well, the now-defunct GData 2.0 Protocol Guide (also on the wayback machine) says in respect of the "q" parameter:

list search terms separated by spaces, in the form q=term1 term2 term3. (As with all of the query parameter values, the spaces must be URL encoded)

However, the defunct-so-much-as-to-be-unpublished-anymore-by-Google Spreadsheets Data API 3.0 Reference Guide is a bit light-on with information about parameters to the list-feed-specific "sq" parameter.

I'd probably try wrapping the search term in quotes "like so" (and URLencoding them). That's the technique which the "q" parameter uses for delimiting entire phrases.

If that didn't work, I'd file an issue report complaining about inadequate documentation. Feel free to cite my prior complaint.



来源:https://stackoverflow.com/questions/12796368/getting-error-in-retrieving-data-from-google-spreadsheet-api-using-structure-que

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!