2013-03-12 6 views
2

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.

+0

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

+0

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

+1

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. –

Répondre

1

Vous recevez des erreurs de délai d'attente de socket - votre réseau ou le site est trop lent. Avez-vous essayé d'étendre le délai d'expiration? Cela devrait aider si le problème est intermittent.

Jsoup.connect(url).timeout(10*1000); // sets timeout to 10 seconds 

Voir le livre de cuisine de jsoup Load a Document from a URL pour plus d'informations.