0

AndroidのAsyncTaskクラスと、なぜエラーが発生するのかについて質問があります。ここで内部クラスを定義しました。

class MyTask extends AsyncTask<String,String,Integer>{


            Context context;
                ProgressDialog dialog;
                MyTask(Context c)
                {
                    this.context = c;
                }

                //@Override
                protected void onPreExecute()
                {
                     dialog = new ProgressDialog(context);
                dialog.setMessage("Scanning Ports!");
                    dialog.show();
                }
                @Override
                protected Integer doInBackground(String... params) {
                    // TODO Auto-generated method stub
                    for(intBeg =  intBeg; intBeg <= intEnd; intBeg++             
                    {
                        try
                        {
                        Socket s = new Socket(strMachine, intBeg);
                        isConnected += strMachine + " Is Listening On Port: " + intBeg + "\n";
                        Log.d("PORTSCAN", isConnected);
                        s.close();
                        }catch(Exception e){
                            notConnected += strMachine + " Is Not Listening On Port: " + intBeg + "\n";                         
                            //Toast.makeText(getBaseContext(), e.getMessage(), 3000).show();
                            Log.d("PORTSCAN", notConnected);

                        }
                    }


                    return 1;
                }

                protected void onPostExecute(Integer... params)
                {

                }
                protected void onProgressUpdate(String... params)
                {

                }





            }

ただし、doInBackgroundが終了すると、onPostExecute()を呼び出すことになりますが、これは発生しません。また、onPostExecute()で「@Override」アノテーションを使用しようとしても、onPostExecuteがスーパークラスメソッドをオーバーライドする必要があるというエラーが表示されます。何が起こっているのかわからない!何か助けはありますか?ありがとう!

4

4 に答える 4

2

onPostExcecute(Integer result)単一の引数を取ります(いいえ...)。

引数が一致しない場合、スーパーメソッドと一致しないため、オーバーライドされません(呼び出されます)。一般@Overrideに、エラーが発生した場合は、メソッド名/パラメーターに問題があります(またはスーパークラスにそのようなメソッドがありません)。

于 2012-06-12T13:08:49.933 に答える
1
 protected void onPostExecute(Integer params)//its single Integer object, not array of Integer objects

そのjavaVarargsand you can't change parameter of overrided method、オーバーライドメソッドの動作を変更するだけです。AsyncTask Class.

于 2012-06-12T13:10:42.517 に答える
0

このonPostExecuteMethodを使用するだけです

@Override
protected void onPostExecute(Integer result) {
    super.onPostExecute(result);
    Log.e("LOG", " on Post");
}
于 2012-06-12T13:16:08.023 に答える
0

このコードを確認してください

private class DownloadingProgressTask extends
        AsyncTask<String, Void, Boolean> {

    private ProgressDialog dialog = new ProgressDialog(ShowDescription.this);

    /** progress dialog to show user that the backup is processing. */

    /** application context. */

    protected void onPreExecute() {
        this.dialog.setMessage("Please wait");
        this.dialog.show();
    }

    protected Boolean doInBackground(final String... args) {
        try {
            downloadFile(b.getString("URL"));
            return true;
        } catch (Exception e) {
            Log.e("tag", "error", e);
            return false;
        }
    }

    @Override
    protected void onPostExecute(final Boolean success) {

        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (success) {
            Toast.makeText(ShowDescription.this,
                    "File successfully downloaded", Toast.LENGTH_LONG)
                    .show();
            imgDownload.setVisibility(8);
        } else {
            Toast.makeText(ShowDescription.this, "Error", Toast.LENGTH_LONG)
                    .show();
        }
    }

}
于 2012-06-12T13:17:34.980 に答える