Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在AsyncTack中使用ProgressDialog从类扩展应用程序调用_Java_Android_Android Asynctask - Fatal编程技术网

Java 在AsyncTack中使用ProgressDialog从类扩展应用程序调用

Java 在AsyncTack中使用ProgressDialog从类扩展应用程序调用,java,android,android-asynctask,Java,Android,Android Asynctask,我用自己的数据类扩展到应用程序类。它用于在我的应用程序中存储全局对象,并使所有活动站点都可以访问它们。我希望这个类在应用程序运行时初始化,通过AsyncTask从internet下载数据。如何在AsyncTask中显示/隐藏ProgressDialog,这需要我向其传递正确的上下文/活动 public class DataSource extends Application{ private int userid; private Object[] orders; //i

我用自己的数据类扩展到应用程序类。它用于在我的应用程序中存储全局对象,并使所有活动站点都可以访问它们。我希望这个类在应用程序运行时初始化,通过AsyncTask从internet下载数据。如何在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();
        }
    }
}
公共类数据源扩展应用程序{
私有int用户id;
私有对象[]命令;
//初始化
@凌驾
public void onCreate(){
//从internet提取数据并按顺序存储
super.onCreate();
}
公共无效开始加载(活动调用活动){
//如何将正确的活动传递给新的downloadData对象?
downloadData任务=新的downloadData(调用活动);
task.execute(新字符串[]{”http://www.myurl.com" });
}
私有类下载数据扩展异步任务{
私有进程对话;
私人活动;
公共下载数据(主要活动){
这个。活动=活动;
this.progressDialog=新建progressDialog(活动);
}
受保护的void onPreExecute(){
progressDialog.setMessage(“下载事件…”);
progressDialog.show();
}
受保护的字符串doInBackgroun(字符串…参数){
//在后台执行异步任务下载功能。。。
}
受保护的void onPostExecute(){
progressDialog.disclose();
//MainActivity中的回调函数,用于指示数据已加载
activity.dataisload();
}
}
}

我最终通过这种方式从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
    }
}

这个问题可以解释一切:您没有理由希望在
应用程序
类中下载数据,而不是您的一项活动。@Sam澄清一下,数据下载任务工作正常。这只是正确初始化ProgressDialog的问题。不过,我会通读这篇文章,因为它似乎写得很好,而且非常透彻。谢谢@Luksprog-为什么最初从DataSource类中下载数据会有问题?在我看来,它就是用来检索整个应用程序中使用的数据的。是的,您可以通过
((数据源)getApplicationContext())来实现这一点。在所需的
活动中开始加载(this)
。在您的第一个代码中,您直接从
onCreate
方法运行任务,该方法不起作用。但即使如此,我仍然会将任务移动到主活动中,然后在任务完成时简单地更新
应用程序
类中的数据字段。