次の Android コードを使用して、インターネット上の HTML ページに接続し、数行を抽出します。ほとんどの場合、コードは正常に実行されますが、ハングすることがあります。「強制終了」ダイアログを表示するには、モバイルの戻るボタンを押す必要があります。ただし、エミュレーターでは常に正常に動作します (PC で高速接続を使用します)。
- 携帯電話の EDGE/GPRS 接続が遅いためにコードがハングしているのでしょうか?
- ソケットのタイムアウトを挿入する必要がありますか?
- コードがハングする他の理由は何ですか?
- コードがハングしないようにするにはどうすればよいですか? エラーをトラップして、再試行する前にユーザーにメッセージを返す方法はありますか?
助けてください。
private String readFile(){
List<String> scores = new ArrayList<String>();
String result="";
String score = "";
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.espncricinfo.com/icc_cricket_worldcup2011/engine/current/match/433567.html");
try{
HttpResponse response = client.execute(request);
//txtResult.setText(HttpHelper.request(response));
try{
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null){
str.append(line + "\n");
}
in.close();
result = str.toString();
//result = str.toString().substring(1,500);
Pattern p = Pattern.compile(
"<title>(.*)</title>",
Pattern.DOTALL
);
Matcher matcher = p.matcher(
result
);
if (matcher.find())
{
score = matcher.group(1).toString();
}
TextView tv = (TextView)findViewById(R.id.textview);
tv.setText(score);
return score;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "IOException e = " + e.toString(), Toast.LENGTH_LONG).show();
Log.d(TAG, "IOException e = " + e.toString());
return "IOException e = " + e.toString();
}catch(Exception ex){
result = "Error";
ex.printStackTrace();
Toast.makeText(this, "Exception ex = " + ex.toString(), Toast.LENGTH_LONG).show();
Log.d(TAG,"Exception ex = " + ex.toString());
return "Exception ex = " + ex.toString();
}
} catch (SocketTimeoutException e) {
e.printStackTrace();
Toast.makeText(this, "SocketTimeoutException e = " + e.toString(), Toast.LENGTH_LONG).show();
Log.d(TAG, "SocketTimeoutException e = " + e.toString());
return "SocketTimeoutException e = " + e.toString();
}catch(Exception ex){
Toast.makeText(this, "Exception ex1 = " + ex.toString(), Toast.LENGTH_LONG).show();
Log.d(TAG, "Exception ex1 = " + ex.toString());
return "Exception ex1 = " + ex.toString();
}
}