0

Refresh我的简单应用程序设置为在单击按钮时检索 RSS 提要。
单击刷新按钮启动AsyncTask检索提要。这AsyncTask是主要活动的子类。

这是我的班级的样子:

public class NasaDailyImage extends Activity{
    public ProgressDialog modalDialog = null; //problematic
//------------------------------------------------------------------------------
    @Override
    protected void onCreate(Bundle savedInstanceState){
        //instantiate the ProgressDialog
        Button b = //get reference to button
        b.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                modalDialog.show(); // show modal
                Toast.makeText(getApplicationContext(), "Getting feeds", 500).show();
                new AsyncRetriever().execute(new IotdHandler()); // Get the feeds !!
            }
        });
    }
//------------------------------------------------------------------------------
    public synchronized void resetDisplay(boolean parseErrorOccured, 
        boolean imageErrorOccured,
        IotdHandler newFeeds){
        if(parseErrorOccured || imageErrorOccured){
            // make a Toast
            // do not update display
        }else{
            // make a Toast
            // update display
            // based on new feed
        }
    }
//------------------------------------------------------------------------------
    class AsyncRetriever extends AsyncTask<IotdHandler,Void,IotdHandler>{

        @Override
        protected IotdHandler doInBackground(IotdHandler... arg0) {
            IotdHandler handler = arg0[0];
            handler.processFeed(); // get the RSS feed data !
            return handler;
        }
//------------------------------------------------------------------------------    
        @Override
        protected void onPostExecute(IotdHandler fromInBackground){
            resetDisplay( // call to update the display
            fromInBackground.errorOccured,
            fromInBackground.imageError,
            fromInBackground);
        }
//------------------------------------------------------------------------------


}  

问题show()在于. modalDialog_ onCLickListener这导致我的应用程序崩溃。为什么?我该如何解决?

4

3 回答 3

2

当你调用它时,你ProgressDialog就是null这样。在调用它的方法之前实例化它。NPEshow()

可能像这里这样的地方实例化它然后设置消息,标题,在显示它之前你想要的任何东西

 @Override
protected void onCreate(Bundle savedInstanceState){
    //instantiate the ProgressDialog

   // can set message, title, etc. here

    Button b = //get reference to button
   b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) { 
    modalDialog = ProgressDialog.show(NasaDailyImage .this, "Enter Title", "Enter Message");
于 2013-07-24T18:49:26.690 回答
2

无法在后台线程上更新 ui。doinBACKground 在后台线程上调用。您应该使用进度对话框来显示异步任务,然后您可以更改用户界面 (UI) 中的任何内容。

第 1 步:首先初始化您的进度对话框。

ProgressDialog progressDialog;

第 2 步:然后在进度对话框开始下方开始您的 doBackground 工作。

progressDialog = ProgressDialog.show(Activity1.this, "",
                        "Loading...");

第 3 步:最后在您的工作完成后关闭您的进度对话框。

progressDialog.dismiss();

在进度对话框的平均时间,您可以更改任何 ui

于 2013-07-24T18:56:07.350 回答
1

您需要实例化 ProgressDialog:

modalDialog = ProgressDialog.show(this, null, "Please, wait...");
于 2013-07-24T18:50:56.000 回答