J'ai un problème. J'utilise Jsoup pour analyser le site Web. Pour cela, j'utilise AsyncTask. Mais très souvent, les données ne sont pas. Lorsque je tente d'utiliser ce code:Android: Jsoup dans AsyncTask
public class ShowBar extends AsyncTask<String, Void, String>
{
ProgressDialog mProgressDialog;
public String info = "empty";
private boolean today = true;
private Context context_dialog;
private OnCompleteListener mOnCompleteListener;
public ShowBar(Context context, boolean day)
{
context_dialog = context;
today = day;
}
public void setOnCompleteListener(OnCompleteListener listener) {
mOnCompleteListener = listener;
}
@Override
protected void onPostExecute(String result) {
mOnCompleteListener.OnComplete(info,true);
super.onPostExecute(result);
mProgressDialog.dismiss();
}
@Override
protected void onPreExecute() {
mProgressDialog =
ProgressDialog.show
(context_dialog
, "Loading"
, "Please wait", true);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
@Override
protected String doInBackground(String... params) {
//publishProgress(new Void[] {});
core();
return info;
}
void core()
{
Elements links;
final String URL = "http://dissp.com/translation/sport/footbol";
final String YesterdayURL = "http://dissp.com/translation/sport/footbol/start";
if (today)
{
Document doc = null;
try {
doc = Jsoup.connect(URL).get();
links = doc.select("table[class=translation]");
info = links.outerHtml();
}catch (Exception e){
Log.e("errors","try-");
core();
}
}
}
Connexion est écrit:
03-12 22:45:50.809: ERROR/errors(24683): try-
03-12 22:45:52.519: ERROR/errors(24683): try-
03-12 22:45:52.709: ERROR/errors(24683): try-
03-12 22:45:53.879: ERROR/errors(24683): try-
03-12 22:45:55.579: ERROR/errors(24683): try-
03-12 22:45:55.779: ERROR/errors(24683): try-
03-12 22:45:56.949: ERROR/errors(24683): try-
03-12 22:45:58.659: ERROR/errors(24683): try-
03-12 22:45:58.859: ERROR/errors(24683): try-
03-12 22:46:00.099: ERROR/errors(24683): try-
03-12 22:46:01.719: ERROR/errors(24683): try-
03-12 22:46:01.929: ERROR/errors(24683): try-
03-12 22:46:03.179: ERROR/errors(24683): try-
03-12 22:46:04.799: ERROR/errors(24683): try-
03-12 22:46:04.999: ERROR/errors(24683): try-
Et ainsi de suite ....
Trace de la pile:
03-13 12:22:32.239: INFO/InputDispatcher(176): Delivering key to current input target
03-13 12:22:32.239: INFO/PowerManagerService(176): Ulight 3->7|0
03-13 12:22:32.319: INFO/InputDispatcher(176): Delivering key to current input target
03-13 12:22:32.509: WARN/System.err(25804): java.net.SocketTimeoutException
03-13 12:22:32.519: WARN/System.err(25804): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:461)
03-13 12:22:32.519: WARN/System.err(25804): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
03-13 12:22:32.519: WARN/System.err(25804): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:65)
03-13 12:22:32.519: WARN/System.err(25804): at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:140)
03-13 12:22:32.529: WARN/System.err(25804): at java.io.BufferedInputStream.read(BufferedInputStream.java:225)
03-13 12:22:32.529: WARN/System.err(25804): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readLine(HttpURLConnectionImpl.java:660)
03-13 12:22:32.529: WARN/System.err(25804): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readResponseHeaders(HttpURLConnectionImpl.java:690)
03-13 12:22:32.529: WARN/System.err(25804): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1040)
03-13 12:22:32.529: WARN/System.err(25804): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726)
03-13 12:22:32.529: WARN/System.err(25804): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:412)
03-13 12:22:32.529: WARN/System.err(25804): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:393)
03-13 12:22:32.529: WARN/System.err(25804): at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:159)
03-13 12:22:32.529: WARN/System.err(25804): at org.jsoup.helper.HttpConnection.get
Cette est la méthode:
void core()
{
Elements links;
final String URL = "http://dissp.com/translation/sport/footbol";
final String YesterdayURL = "http://dissp.com/translation/sport/footbol/start";
if (today)
{
Document doc = null;
try {
doc = Jsoup.connect(URL).get();
links = doc.select("table[class=translation]");
info = links.outerHtml();
}catch (Exception e){
Log.e("errors","try-");
core();
}
}
}
Comment puis-je résoudre ce problème? Je veux que l'application affiche toujours le résultat.
N'empêchez pas vos instructions catch d'imprimer l'exception. Replacez e.printStackTrace() là-bas pour obtenir le message de logcat qui vous montrera l'erreur. – dymmeh
De même, n'appelez pas la méthode elle-même de manière récursive dans le bloc catch, une seule trace de pile suffit. – yorkw
N'avalez pas l'exception, utilisez 'Log.e (" erreurs ", e);' ou 'Log.e (" erreurs "," Impossible d'analyser le document ", e);' à la place. Le fait qu'une exception soit survenue n'est pas très utile, son stacktrace l'est. –