私はcomet URLリンクからjson文字列を取得しようとしています。ここで長いポーリング(彗星)でHttpURLConnectionのタイムアウト - android
は、APIのリンクです:ここhttp://www.plurk.com/API#realtime は説明です:
You'll get an URL from /APP/Realtime/getUserChannel and you do GET requests to this URL to get new data. Your request will sleep for about 50 seconds before returning a response if there is no new data added to your channel. You won't get notifications on responses that the logged in user adds, but you will get notifications for new plurks.
私はcomet_serverのURLを取得するとFirefoxにそれを貼り付けて、手動で結果を得ることができました。しかし、私はアンドロイドでこれらのjson文字列を取得しようとすると、私はタイムアウトエラーが発生しました。
01:48:51.698 com.net.xerothermic.plurk INFO PLURK http://comet58.plurk.com:80/comet?channel=...&offset=0
01:53:43.680 com.net.xerothermic.plurk ERROR PLURK HTTP con. get response error:Connection timed out
ここでは、データの取得に使用したコードを示します。
URL url = new URL(urlString);
HttpURLConnection conn = null;
try
{
conn = (HttpURLConnection) url.openConnection();
}
catch (IOException ex)
{
Log.e("PLURK", "HTTP con. open error:" + ex.getMessage());
return "";
}
try
{
conn.setRequestMethod("GET");
}
catch (ProtocolException ex)
{
Log.e("PLURK", "HTTP con. set method error:" + ex.getMessage());
}
try
{
return conn.getResponseMessage();
}
catch (IOException ex)
{
Log.e("PLURK", "HTTP con. get response error:" + ex.getMessage());
return "";
}
ご迷惑をおかけして申し訳ありません。
EDIT:ここはブラウザからの出力です。私はいくつかのプロパティを設定するのを忘れましたか?
おそらく読み取りタイムアウトを増やす必要がある - あなたが受け取るメッセージが明示的に読み込みがタイムアウトしたと述べているので。 [こちら](http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout%28int%29)(たとえば)を参照してください。 – Jens
ええ、私もそれについて考えます。しかし、デフォルトのタイムアウト値は0です。つまり、永久に待機する必要があります。ログからは、タイムアウト(〜5分)を生成するのに50秒以上かかることがあります。 – Patrick
@Jensあなたは正しいです!デフォルトのタイムアウト値は0に設定されていましたが、手動でタイムアウト値を設定する必要があります。 70000(70秒)に設定した後、プログラムは正常に実行されました。奇妙なことに、PC上で実行される同じコードにはこれらの動作がなく、タイムアウト値を設定する必要はありませんでした。 – Patrick