2016-12-29 22 views
0

私はAsyncTaskに問題があります。 doInBackgroundに特定のエラースローがキャッチされた場合、警告ダイアログを表示するにはpostExecuteが必要です。問題はpostExecuteが呼び出されないことです。私は@Overrideを追加しようとしましたが、Android Studioはスーパークラスのメソッドをオーバーライドしていないと言います。また、戻り値の型を変更しようとしました。私はこのサイトを見渡して答えを見つけることができませんでした。前もって感謝します。onPostExecuteは呼び出されません

AsyncTaskクラス

public class AsyncTaskActivity extends AsyncTask<Void, Void, Void> { 

    String exception; 

    @Override 
    protected void onPreExecute() { 
    } 


    protected void onPostExecute() { 
     if (exception.contains("java.net.UnknownHostException")) { 
      MainActivity.showDialog(); 
      Log.i("Error Message", "ERROR MESSAGE SHOWN"); 
     } 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      Log.i("AsyncTask", "Loading..."); 
      // Make a URL to the web page. This takes the string representation of the URL 
      // and changes it into a URL object 
      URL url = new URL("http://api.wunderground.com/api/0c0fcc3bf62ab910/conditions/q/IN/Fort_Wayne.json"); 

      // Get the input stream through URL Connection 
      URLConnection con = url.openConnection(); 
      InputStream is = con.getInputStream(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

      String line; 
      // read each line and write to text file 
      while ((line = br.readLine()) != null) { 
       Log.i("AsyncTask", line); 
       TextEditor.file = new File(MainActivity.path, "siteInfo.txt"); 
       TextEditor.writeString(line); 
      } 
      TextEditor.saveAndClose(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      exception = e.toString(); 
     } 

     Log.i("AsyncTask", "DONE"); 
     return null; 
    } 
} 

ShowDialogメソッド

public static void showDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.context); 
    builder.setView(R.layout.dialog_layout); 
    builder.setPositiveButton(
      R.string.dialog_close, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        System.exit(1); 
       } 
      }); 

    builder.show(); 
} 
+0

ルックを引き起こす可能性があり、あなたは例外を初期化する必要がありますのでご注意くださいドキュメントからonPostExecute()を呼び出すと、パラメータがありません。 –

+0

onPostExecuteの@Overrideはどこですか? –

答えて

0

見て、あなたが何か

@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 
    if (exception.contains("java.net.UnknownHostException")) { 
     MainActivity.showDialog(); 
     Log.i("Error Message", "ERROR MESSAGE SHOWN"); 
    } 
} 
+0

ありがとう! '空白の結果'がなぜ機能するのか説明できますか?パラメータが型の結果であると思いましたか? – Dusk

+0

別の質問の別の回答から引用:OnPostExecute()は、引数(doInBackground()から返すオブジェクト)を受け取ります。これをprotected void onPostExecute(Void v)に変更します。引数を指定しないと、メソッドのシグネチャが一致せず、オーバーライドアノテーションがこのシグネチャでオーバーライドする関数がないことを不平とし始めます。 –

0

ファーストを逃しているように、このドキュメントを参照してください。 onPostExecute()のパラメータが不足しています。あなたがしなければならないだろうか

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

され、

@Override 
protected void onPostExecute(Params) { 
     // your logics 
} 
0
@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    if (exception.contains("java.net.UnknownHostException")) { 
     MainActivity.showDialog(); 
     Log.i("Error Message", "ERROR MESSAGE SHOWN"); 
    } 
} 

それ以外の場合は、メソッドのシグネチャでNullPointerExceptionが

関連する問題