0

craigslist のロケーション ページからソース コードを読み取ろうとしています。時々、例外が発生し、その理由がわかりません。私の携帯電話の 3g では、しばらくの間動作するのは奇妙ですが、どこからともなく例外がスローされ始めます。WiFi でテストすると、75% の確率でこの例外がスローされます。


07-08 02:43:39.542: W/System.err(16898): java.net.SocketTimeoutException
07-08 02:43:39.562: W/System.err(16898):    at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:461)
07-08 02:43:39.562: W/System.err(16898):    at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
07-08 02:43:39.566: W/System.err(16898):    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
07-08 02:43:39.570: W/System.err(16898):    at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:134)
07-08 02:43:39.570: W/System.err(16898):    at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:161)
07-08 02:43:39.574: W/System.err(16898):    at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:159)
07-08 02:43:39.574: W/System.err(16898):    at java.io.InputStreamReader.read(InputStreamReader.java:255)
07-08 02:43:39.574: W/System.err(16898):    at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
07-08 02:43:39.578: W/System.err(16898):    at java.io.BufferedReader.readLine(BufferedReader.java:396)
07-08 02:43:39.578: W/System.err(16898):    at com.codalata.craigslistchecker.GetLocation.GetLocationData(GetLocation.java:56)
07-08 02:43:39.578: W/System.err(16898):    at com.codalata.craigslistchecker.Location$1.run(Location.java:407)
07-08 02:43:39.582: W/System.err(16898):    at java.lang.Thread.run(Thread.java:1019)

私はちょうどサーバーから読み込もうとしています。どんな助けでも大歓迎です!

while ループにカウンターを配置して、エラーが発生する前にループ回数を確認しました。519 回ループすることもあれば、400 回ループすることもあります。

public class GetLocation {
int CityindexEnd;
int CityindexStart;
int StateC;
String URLME = null;
String Search = "a href=\"";
int count = 0;

@SuppressWarnings("finally")
public String GetLocationData()
        throws Exception {
    BufferedReader in = null;
    String data = null;
    try {
        HttpGet httpGet = new HttpGet(
                "http://www.craigslist.org/about/sites");
        HttpParams httpParameters = new BasicHttpParams();
        int timeoutConnection = 6000;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        int timeoutSocket = 12000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
        DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
        HttpResponse response = httpClient.execute(httpGet);
        in = new BufferedReader(new InputStreamReader(response.getEntity()
                .getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String ln = System.getProperty("line.separator");
        while ((l = in.readLine()) != null) {
            count++;
            sb.append(l + ln);
        }
        in.close();
        data = sb.toString();
                    return data;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
                return URLME;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return URLME;
    }
}
4

1 に答える 1

0

でタイムアウトを設定しています

int timeoutConnection = 4000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
        timeoutConnection);
int timeoutSocket = 7000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

基本的に、接続が失われており (または完全に接続されていない)、時間がかかりすぎています。タイムアウトしたくない場合は、これらの行を削除できます。その場合、その例外を適切に処理する必要があります。

于 2013-07-08T07:03:04.380 に答える