1

独自のデータ クラスを使用して Application クラスに拡張しました。アプリにグローバル オブジェクトを保存し、すべてのアクティビティからアクセスできるようにするために使用されます。このクラスは、アプリケーションの実行時に初期化されたときに、AsyncTask を介してインターネットからデータをダウンロードしたいと考えています。AsyncTask 内で ProgressDialog を表示/非表示にするには、正しい Context/Activity を渡す必要がありますか?

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 に答える