3

AndroidでGoogleSpreadsheetAPIを使用しています。統合は正常に完了し、行を取得できます。しかし、検索機能で少し問題に直面しています。スプレッドシートを3〜4回検索しています。問題は、一部の列のスプレッドシートで、単語の間にスペースがあることです。

たとえば、Hello Worldは行番号5の値であり、この行のヘッダー名はtestとしましょう。

したがって、 Hello Worldを検索すると、InValidEntryException:BadRequestがスローされます。

また、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プロトコルガイド(これもウェイバックマシン上にあります)は、「q」パラメータに関して次のように述べています。

検索語をスペースで区切って、q = term1term2term3の形式でリストします。(すべてのクエリパラメータ値と同様に、スペースはURLエンコードする必要があります)

ただし、GoogleスプレッドシートデータAPI 3.0リファレンスガイドでは、リストフィード固有の「sq」パラメータのパラメータに関する情報が少しわかりやすくなっています。

私はおそらく、検索語を「そのように」引用符で囲んでみます(そしてそれらをURLエンコードします)。これは、「q」パラメーターがフレーズ全体を区切るために使用する手法です。

それがうまくいかなかった場合は、不十分なドキュメントについて不平を言う問題レポートを提出します。私の以前の苦情を自由に引用してください。

于 2012-10-09T14:56:37.383 に答える