2012-02-24 26 views
0

現在、私はネットワーク通信レイヤーの実装に取り​​組んでいます。そして、経験豊富なAndroidデベロッパーとまず相談することが良いと思った。ネットワーク通信層。 AsyncTaskエラー処理

WebApiControllerというクラスがあります。このクラスは、要求を作成し、応答を解析し、モデルに格納します。 WebApiControllerメソッドはメインスレッドで実行されるので、AsyncTasksでラップしてメインスレッドから負荷を取り除きます。 WebApiControllerメソッドは、ServerBadResponseException、XmlParserExceptionなどの例外をスローする可能性があります。エラーの種類(エラーの種類に基づいて異なるエラーメッセージを表示する)に応じて処理できるようにしたいと考えています。したがって、エラータイプについてonPostExecuteに通知し、うまく処理するための最良の方法は何でしょうか。

+0

は '私はいくつかのアイデアを持っている、これをどのように扱うかが、私は、彼らはあなたのアイデアを共有についてはどのように非常にgood'あるSHUREませんか? – WarrenFaith

+0

=)[OK]をクリックします。 onPostExecuteに送信できるエラーを列挙し、そのあとでdoInBackroundでrunOnUiThreadを処理します。しかし、彼らは私のために悪いです –

答えて

1

またはこの:

class SomeTask extends AsyncTask<Void, Void, Params> { 

    @Override 
    protected Params doInBackground(Void... voids) { 
     Params params = new Params(); 
      try { 
       ..... 
       params._result = ..... 
      } catch (Throwable e) { 
       params._error = e; 
      } 
     return params; 
    } 

    @Override 
    protected void onPostExecute(Params params) { 
     if(params._error != null){ 
      .... 
     } else { 
      .... 
     } 
    } 
} 

class Params { 
    public Throwable _error; 
    public Object _result; 
} 
0

あなたは(doInBackgroung方法で)これを試すことができます。

 try { 
      ........ 
     } catch (final Throwable e) { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        Log.e(TAG, e.getMessage(), e); 
        Toast.makeText(......).show(); 
       } 
      }); 
     } 
1

基本的には最も簡単な方法は、 "SUCCESS"、 "FAILURE_XY" のようなリターンコードを設定することで、あなたのonPostExecute()でそれを処理してください。あなたが正常にデータを返すとき、これは、また働く...

doInBackground() { 
    try { 
     // code 
     return data; 
    } catch (Exception e) { 
     Log.e(TAG, "error description", e); 
     resultCode = FAILURE; 
     return null; 
    } 
} 

onPostExecute(Data data) { 
    if (data == null) { 
     // check resultCode! 
    } else { 
     // work with your data 
    } 
} 
+0

@appservが示したものは基本的にあなたが探しているものです。基本的な結果コードには、少なくともEnumまたは単純な整数を持つことが重要です。 UXによると、エラーメッセージ自体をユーザーに表示する必要があります。単にそれらを記録して、ユーザーに何かが間違っていたことを示すだけです。実際の例外メッセージを表示しないでください! – WarrenFaith

+0

それはどういう意味ですか – WarrenFaith

関連する問題