2010-11-30 36 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只是沒有時間顯示?
相關問題