如何在外部转换内部AsyncTask?

sma*_*use 0 android outer-join inner-classes android-context android-asynctask

我创建了这个AsyncTask内部类,现在我想把它变成外层.这是代码:

    private class DownloadDataFromServer extends AsyncTask<String, Integer, String> {
        ProgressDialog dialog;
        boolean connErr = false;
        boolean soErr = false;

        @Override
        protected void onPreExecute() {
            dialog = new ProgressDialog(HomePage.this); !!!!PROBLEM!!!!
            dialog.setIndeterminate(false);
            dialog.setMax(100);
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setCancelable(false);
            dialog.setTitle("Download");
            dialog.setMessage("Updating...");
            dialog.show();

            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... urls) {
            // do something
        }

        protected void onProgressUpdate(Integer... progress) {
            // Update the progress
            dialog.setProgress(progress[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            if (connErr || soErr) {
                String msg = "Bad connection";
                AlertDialog.Builder builder;
                builder = new AlertDialog.Builder(HomePage.this); !!!!PROBLEM!!!!
                builder.setCancelable(false);
                builder.setTitle("Connection timeout");
                builder.setMessage(msg);

                builder.setPositiveButton("Retry", new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        dialog.dismiss();
                        new DownloadDataFromServer().execute(new String[] { "http://www.example.com" });
                    }
                });

                builder.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        finish(); !!!!PROBLEM!!!!
                    }
                });         
                AlertDialog dialog = builder.create();
                dialog.show();
            } else {
                if (Integer.parseInt(result) <= 0) {
                    Toast.makeText(getBaseContext(), "Error!", Toast.LENGTH_SHORT).show(); !!!!PROBLEM!!!!
                } else {
                    Toast.makeText(getBaseContext(), "OK!", Toast.LENGTH_SHORT).show(); !!!!PROBLEM!!!!
                }
            }
            dialog.dismiss();
        }
    }
Run Code Online (Sandbox Code Playgroud)

请注意"!!!!问题!!!!" 上面代码中的字符串:我得到的所有错误.我试图应用一些解决方法,但最后我无法使其工作.另外我也要用

private Database db = new Database(this);
Run Code Online (Sandbox Code Playgroud)

但我不知道应该用什么代替"这个".请帮我以正确的方式转换这个内部类.

M D*_*M D 5

你应该constructorDownloadDataFromServer类创建一个参数并将Context作为参数传递

Context mCon;

public DownloadDataFromServer(Context con){
 this.mCon=con;
}
Run Code Online (Sandbox Code Playgroud)

并将此mCon上下文用于您DownloadDataFromServer喜欢的任何地方

     builder = new AlertDialog.Builder(mCon);
Run Code Online (Sandbox Code Playgroud)

最后DownloadDataFromServer从任何Activity喜欢中调用

new DownloadDataFromServer(your_Activity.this).execute(......);
Run Code Online (Sandbox Code Playgroud)