2017-07-05 11 views
0

例外を適切に処理できないようです。それはどちらかの「ERROR」または「応用」の文字列を返しますが、Webページがダウンした場合、例外でConnectExceptionとSQLiteの例外が生成され、AsyncTaskによって呼び出されたメソッドで例外を処理できません。

private class PostData extends AsyncTask<String, Void, Void> 
    { 
     String response; 
     protected void onPreExecute() 
     { 
      apply.setText("APPLYING..."); 
     } 
     @Override 
     protected Void doInBackground(String... params) { 

      try { 
       SendHTTPData sendHTTPData = new SendHTTPData(); 
       response = sendHTTPData.sendData(params); 
      } 
      catch(Exception e) 
      { 
       Log.e("someTag", "Caught exception after doinbackground"); 
       response = "ERROR!"; 
      } 
       return null; 
     } 
     protected void onPostExecute() 
     { 
      apply.setText(response); 
     } 
} 

さて、sendDataメソッドが呼び出されるたびに:これは私の非同期メソッドであります私のボタンは「適用中」の状態で止まってしまいます。

sendDataメソッドでエラーが発生するたびに、ボタンテキストを「エラー」として設定したいとします。ここで

は、念のために私のsendHTTPDataクラスです:

public class SendHTTPData { 

    public String sendData(String...) 
    { 
     String POST_DATA = "switch=" + sw + ... 
      try { 
       URL update = new URL(Utils.WEB_URL+path+"?"+POST_DATA); 
       BufferedReader in = new BufferedReader(
         new InputStreamReader(update.openStream())); 

       String inputLine; 
       while ((inputLine = in.readLine()) != null) {} 
       in.close(); 
       Log.w("someTag", "DONE GET RESPONSE"); 
       if(inputLine=="1") 
        return "APPLIED"; 
       else 
        return "ERROR"; 
      } 
      catch (Exception e) { 
       Log.e("someTag", "ERROR BC OF EXCEPTION"); 
       return "ERROR"; 
      } 

     } 
} 

答えて

2

おそらく、それは理想的

@Override 
protected void onPostExecute(Void param) 
{ 
    apply.setText(response); 
} 

ようになっているはず呼び出されることはありませ取得んですのでonPostExecuteが正しくないあなた、あなたは自分の応答を送信する必要がありますonPostExecuteにはそれが使用されているので、すべてがこのように表示されます。

private class PostData extends AsyncTask<String, Void, String> 
    { 
     protected void onPreExecute() 
     { 
      apply.setText("APPLYING..."); 
     } 
     @Override 
     protected String doInBackground(String... params) { 
      String response; 
      try { 
       SendHTTPData sendHTTPData = new SendHTTPData(); 
       response = sendHTTPData.sendData(params); 
      } 
      catch(Exception e) 
      { 
       Log.e("someTag", "Caught exception after doinbackground"); 
       response = "ERROR!"; 
      } 
       return response; 
     } 
     @Override 
     protected void onPostExecute(String response) 
     { 
      apply.setText(response); 
     } 
} 
+0

void戻り値の型のときにdoInBackgroundを使用して文字列を返す方法はありますか?また、コードが動作しない、私はそれを試してみました。 – Harsh

+0

ここで値を変更して文字列を返します。 'AsyncTask '最後の文字列は戻り値の型です。おそらくAsyncTasksに関するドキュメントを読むべきです – tyczj

+0

また、私は文字列を返すために私の答えを編集しました – tyczj

関連する問題