1

我用自己的数据类扩展到应用程序类。它用于在我的应用程序中存储全局对象,并使所有 Acitivites 都可以访问它们。我希望这个类在应用程序运行时初始化,通过 AsyncTask 从互联网下载数据。如何在 AsyncTask 中显示/隐藏 ProgressDialog,这需要我将正确的上下文/活动传递给它?

public class DataSource extends Application{
    private int userid;
    private Object[] orders;
    //initialize

    @Override
    public void onCreate() {
        // Pull data from the internet and store it in orders
        super.onCreate();
    }

    public void beginDataLoad(Activity callingActivity) {
        // HOW DO I PASS THE CORRECT ACTIVITY TO MY NEW downloadData OBJECT?
        downloadData task = new downloadData(callingActivity);
        task.execute(new String[] { "http://www.myurl.com" });
    }

    private class downloadData extends AsyncTask<String, Void, String>{
        private ProgressDialog progressDialog;
        private MainActivity activity;

        public downloadData(MainActivity activity) {
            this.activity = activity;
            this.progressDialog = new ProgressDialog(activity);
        }

        protected void onPreExecute() {
            progressDialog.setMessage("Downloading events...");
            progressDialog.show();
        }
        protected String doInBackgroun(String... params) {
            // Do AsyncTask download functions in background...
        }
        protected void onPostExecute() {
            progressDialog.dismiss();
            //Callback function in MainActivity to indicate data is loaded
            activity.dataIsLoaded();
        }
    }
}
4

1 回答 1

0

我最终以这种方式从我的 MainActivity 调用数据源加载。

public class MainActivity extends Activity {

    //onclick function...
    myDataSource = (DataSource)getApplicationContext();
    myDataSource.beginDataLoad(MainActivity.this);

    //Callback for AsyncTask to call when its completed
    public void dataIsLoaded() {
        //Do stuff once data has been loaded
    }
}
于 2012-11-11T23:51:39.183 回答