2011-01-07 6 views
0

Ich brauche etwas Hilfe, wie ich gerade eine Methode in einem Thread aufrufen. jetzt was ich will ist warten auf Antwortformular getData() -Methode nur für 15 Sekunden. Wenn es vor 15 Sekunden antwortet, sollte es beendet werden, andernfalls nach 15 Sekunden sollte es beendet werden. Der Code ist unten angegeben:Thread in Android

boolean networkStatus; 

private Runnable runnable; 

private ProgressDialog m_ProgressDialog = null; 

     private Runnable returnRes = new Runnable() { 

     @Override 

     public void run() { 

     if(networkStatus){ 

      setData(); 

     m_ProgressDialog.dismiss(); 

     } 

    }; 

private void callGetdata(){ 

runnable = new Runnable() { 

     @Override 

     public void run() { 

     networkStatus = getData(); 

      runOnUiThread(returnRes); 

     } 

    }; 

    Thread thread = new Thread(null, runnable, "MovetoBackground"); 

    thread.start(); 

    m_ProgressDialog = ProgressDialog.show(this, "", getString(R.string.loadMsg), true); 

} 
+1

Ich nehme an, dass getData ein blockierender Aufruf ist ... also, es sei denn, Sie haben Zugriff auf diese Methode, dann gibt es nichts, was Sie wirklich tun können, um diesen Aufruf zu beenden (außer die zugrunde liegende Netzwerkverbindung zu trennen). Was hast du in getData? – Kiril

+0

@Lirik oder rufen Sie 'Thread.stop()' aber das ist eine baaaad Idee –

Antwort

1

Was bedeutet getData() tatsächlich tun, da einige Netzwerkklassen Timeout-Optionen haben gebautet, wie die ServerSocket.setSoTimeout() Funktion.
Auch würde ich Android AsyncTask Klasse empfehlen, wie es Multithreading einfacher macht.

+0

Was Sie dort tun, schreit nach AsyncTask (es Ereignis behandelt den Fortschritt Dialog). Als Neuropie darauf hingewiesen, schauen Sie sich das an. Hier ist ein Ausgangspunkt: http://developer.android.com/resources/articles/painless-threading.html. –

+0

Tatsächlich verwenden wir WCF-Dienste. So benutze ich ksoap2 Bibliothek für die Arbeit. Aber manchmal dauert es lange, bis der Spinner weitermacht. Ich möchte es nur für 15 Sek. Begrenzen. und in ksoap2 habe ich keine Verbindung Timeout-Funktion gefunden. –

+0

Ich habe ksoap nicht verwendet, aber diese Seite kann nützlich sein (Es verwendet eine TimerTask, um die Anfrage abzubrechen). http://ksoap2.sourceforge.net/doc/api/org/ksoap2/transport/HttpTransport.html – neuropie