URI のクエリ文字列部分にスペース (' ') があると、URLConnection.getInputStream() で奇妙な問題が発生します。具体的には、機能する URL と機能しない URL があります。両方とも失敗するか、両方とも成功する必要があると思いますが、さらに毎回です。
有効なURL: http://minneapolis.craigslist.ca/search/sss?catAbb=sss&query=iPhone+sprint&sort=date&srchType=A&format=rss 失敗した URL (以下の例外): http://winnipeg.craigslist.ca/search/sss ?catAbb=sss&query=iPhone+sprint&sort=date&srchType=A&format=rss
conn.getInputStream() は IO 例外をスローします: 「インデックス 67 のクエリで無効な文字: http://winnipeg.en.craigslist.ca/search/sss?catAbb=sss&query=iPhone sprint two&sort=date&srchType=A&format=rss」
openConnection はスペースを取得できないようです (「URL」で必要になると予想されるため、既に「+」に置き換えています。「%20」も試しましたが、同じ結果が得られました。
さらに、 URL.toString() は、上で印刷したように URL を報告します。「+」はスペースではありません。
コードは次のとおりです。searchUrl は「URL」インスタンスです。
URLConnection conn = null;
conn = searchUrl.openConnection();
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setUseCaches(true);
conn.setAllowUserInteraction(false);
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
InputStream istream = conn.getInputStream();
int numBytesRead, numBytesWritten = 0;
byte[] buffer = new byte[8 * 1024];
while ((numBytesRead = istream.read(buffer, 0, 8 * 1024)) > 0) {
oStream.write(buffer, numBytesWritten, numBytesRead);
numBytesWritten += numBytesRead;
}
これに対処する場所についてのアイデアはありますか? URLConnection を売り込み、別の道を歩もうとしています...
ありがとうケニー。