2012-01-04 27 views
0

WebサービスのURLにヒットしてサーバから結果を取得する非同期タスクを使用していますが、解析例外が発生した場合はonPreExecute() ()メソッド、今私は、次の実行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ブール変数を値の真で先頭に置きます。 falseに設定された解析例外のcatchで。 postExecuteでは、if文を使用して解析が正常に完了したことを確認し、このif文にonPostExecute行を置きます。 。このよう

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

おかげでうまくそれが働く良い答え – shyam

+0

のための+1 ...しかし...あなたはparsingSuccessfulのVARせずにこれを行うことができていることを確認するために... doInBackgroundはonPostExecuteに渡されるブール値を返します。 (...)を 'final Boolean success'として... – Selvin

3

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

「タスクが(boolean)をキャンセル呼び出すことによって、いつでも取り消すことができ、このメソッドの呼び出しは、(isCancelledへの後続の呼び出しが発生しますこのメソッドを呼び出すと、doInBackground(Object [])が返された後にonPostExecute(Object)の代わりにonCancelled(Object)が呼び出されます。タスクができるだけ早くキャンセルされるようにするには、後退可能であれば(例えばループ内で)doInBackground(Object [])から定期的にn値のisCancelled()を呼び出します。

作業の大部分はすでに完了しているので、ネットワークI/Oより良いだけで成功ブール値を返し、onPostExecute

関連する問題