2010-11-30 39 views
-1

异步进程对话框在android中的应用程序中未显示。有人可以告诉我问题是什么吗?异步进程对话框在Android中的应用程序中未显示android

我的代码

public void onClick(View v) 
{ 
    new FetchTask(getBaseContext()).execute(null); 
} 

public class FetchTask extends AsyncTask<Object, ArrayList,ArrayList> 
{ 

    private ProgressDialog dlg; 
    private Context ctx; 

    public FetchTask(Context context) { 
     ctx = context; 
    } 

    @Override 
    protected void onPreExecute() { 
     dlg = new ProgressDialog(ctx); 
     dlg.setMessage("Loading...."); 
     dlg.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(ArrayList parserValue) { 
     dlg.dismiss(); 

      for(int i=0;i<parservalue.size();i++) 
      { 
       DomParserDataSet dataset=(DomParserDataSet)parservalue.get(i); 
       if(dataset.getToken_string().length()>1) 
         { 


        Intent homeIntent=new Intent(ctx,HelloTabWidget.class); 
        homeIntent.putExtra("strUserName", username); 
        homeIntent.putExtra("strPassword",password); 
        homeIntent.putExtra("questGroupId",dataset.getQuest_group_id()); 
        homeIntent.putExtra("userid",dataset.getUser_id()); 
        homeIntent.putExtra("systemuserid", dataset.getSystem_user_id()); 
        homeIntent.putExtra("providerid",dataset.getIndex_provider_id()); 
         startActivity(homeIntent); 
        //startActivity(new Intent(this,HelloTabWidget.class)); 

        } 
        else 
        {    

        DomParserDataSet dataset1=(DomParserDataSet)parservalue.get(i); 
        AlertDialog.Builder alertbox = new AlertDialog.Builder(ctx); 
         alertbox.setMessage(dataset1.getError_value()); 
         alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() { 


          public void onClick(DialogInterface dialog, int arg1) { 
           // the button was clicked 

          dialog.cancel(); 

          } 
         }); 

         // show it 
         alertbox.show();  
        } 

      } 

      // display data 
     } 

    @Override 
    protected ArrayList doInBackground(Object... arg0) {  

    try 
     { 
      username=edtUserName.getText().toString(); 
      password=edtPassword.getText().toString(); 
      WebService service=new WebService(); 
      String webservicevalue=service.callServer(SOAP_ACTION,"", username,password,URL); 
      webservicevalue=decodeXMLData(webservicevalue); 
      DomParser xmlParser=new DomParser(); 
      parservalue=xmlParser.parseXmlFile(webservicevalue); 

      String parservalue1=Integer.toString(parservalue.size()); 

      Log.d("parser value size is",parservalue1); 


      } 
      catch (Exception e) { 
     // TODO: handle exception 
       e.printStackTrace(); 
     }   

      return parservalue; 
     } 

} 

谁能告诉我我有什么改变?

+1

只是为了排除它可能是别的:你是否尝试删除除了与`ProgressDialog`相关的代码之外的所有代码。运行你的应用程序,看看它是否仍然不显示(只需要在'doInBackground`中放置一个500毫秒的睡眠或某些东西,以便模拟一些处理时间)。 – Nailuj 2010-11-30 16:13:22

回答

1

正如Arhimed所指出的,这是不正确的。尽管为未来的参考留下了答案。

我认为你需要移动 super.onPreExecute();到第一线 onPreExecute(),像这样:

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    dlg = new ProgressDialog(ctx); 
    dlg.setMessage("Loading...."); 
    dlg.show(); 
} 

+0

这不能是一个解决方案,因为`AsyncTask.onPreExecute()`方法有空的主体(没有代码放在里面)。所以你甚至可以删除`super.onPreExecute()` - 什么都不会改变。 – 2010-11-30 13:14:41

+0

@Arhimed:我不知道`onPreExecute`的细节,我只是做了一个合格的猜测,知道通常最好是在重写的方法中调用超级方法的第一件事(至少在setup/pre-methods中)。不知道我认为我的回答是如此糟糕,它应该得到一个低票... – Nailuj 2010-11-30 13:17:12

1

好吧,除了Nailuj的猜测这里是另一对夫妇的合格猜测

  1. 难道是ProgressDialog构造函数期望包装Activity的实例作为上下文而不是Activity.getBaseContext()(顺便说一下,我希望在Activity实例(?)上调用getBaseContext())?
  2. 难道是FetchTask.doInBackground()跑得这么快(也许发生了一些错误,看看有什么LogCat说)ProgressDialog只是没有时间显示?
相关问题