2012-01-04 16 views
0

上午使用異步任務來擊中Web服務url並從服務器檢索結果,但在onExpExcute()方法中的某些時間如果解析異常發生我處理它catch ()方法,現在我想暫停處理下一個手段執行不去OnpostExecute()方法,因此如何停止執行過程,它要OnPostExecute() 我的代碼是下面停止onPostExecute()如果分析異常onpreexecute()發生

@Override 
    protected void onPreExecute() { 
      dialog = new ProgressDialog(MainMenu.this); 
      dialog.setMessage("Processing..."); 
      dialog.setIndeterminate(true); 
      dialog.setCancelable(false); 
      dialog.show(); 
    } 
    @Override 
    protected void onPostExecute(final Boolean success) { 

      if (dialog.isShowing()) 
      { 
      dialog.dismiss(); 
      } 
      Intent i = new Intent(MainMenu.this, filterpagetabs.class); 
       startActivity(i); 



    } 
     @Override 
    protected Boolean doInBackground(final String... args) { 
     try{  
      try { 
       SAXParserFactory spf = SAXParserFactory.newInstance(); 
       SAXParser sp = spf.newSAXParser(); 
       XMLReader xr = sp.getXMLReader(); 
       URL sourceUrl = new URL(
         "http://www.mobi/iphonejh/output.php?estado=1"); 
       MyXMLHandler myXMLHandler = new MyXMLHandler(); 
       xr.setContentHandler(myXMLHandler); 
       xr.parse(new InputSource(sourceUrl.openStream())); 


      } catch (Exception e) { 
       System.out.println("XML Pasing Excpetion = " + e); 



      } 

}

回答

1

在頂部放置一個parsingSuccessful布爾變量,其值爲true。在捕獲解析異常設置爲false時。在postExecute中,使用if語句來檢查解析是否已成功完成,並將onPostExecute行放入此if語句中。

這樣的:

private boolean parsingSuccessful = true; 

@Override 
protected void onPreExecute() { 
     dialog = new ProgressDialog(MainMenu.this); 
     dialog.setMessage("Processing..."); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
} 
@Override 
protected void onPostExecute(final Boolean success) { 
     if (parsingSuccessful == true){ 
      if (dialog.isShowing()){ 
       dialog.dismiss(); 
      } 
      Intent i = new Intent(MainMenu.this, filterpagetabs.class); 
      startActivity(i); 
    } 
} 
    @Override 
protected Boolean doInBackground(final String... args) { 
     try { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 
      URL sourceUrl = new URL(
        "http://www.mobi/iphonejh/output.php?estado=1"); 
      MyXMLHandler myXMLHandler = new MyXMLHandler(); 
      xr.setContentHandler(myXMLHandler); 
      xr.parse(new InputSource(sourceUrl.openStream())); 

     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
      parsingSuccessful = false; 

}

+0

感謝+1好的答案 – shyam 2012-01-04 09:17:54

+0

好吧,它的工作原理...但是...你可以做到這一點,而不parsingSuccessful var ... doInBackground返回布爾將被傳遞給onPostExecute (...)作爲'最終布爾成功'... – Selvin 2012-01-04 09:31:00

3

http://developer.android.com/reference/android/os/AsyncTask.html

「任務可以在任何時候通過調用取消(布爾)取消調用此方法將導致isCancelled後續調用( )返回true,在調用這個方法後,onCancelled(Object),而不是onPostExecute(Object)將在doInBackground(Object [])返回後被調用,爲了確保一個任務儘快被取消,你應該經常檢查retur如果可能的話(例如在一個循環內部),從doInBackground(Object [])週期性地返回n的值isCancelled()。「

儘管由於大部分工作已經完成,即網絡I/O,更好的只是返回一個成功的布爾值,並檢查onPostExecute