2011-03-24 23 views
0
public class classified extends Activity 
{ 
    private ArrayAdapter<String> aaagency ; 
     String strdata=""; 
     String strerrormess=""; 
     public void onCreate(Bundle savedInstanceState) 
    { 
     setTitle("Classified Ad. Booking"); 
       super.onCreate(savedInstanceState); 
       this.setContentView(R.layout.classified); 
     } 
     public void srcAgency(View view) throws IOException 
    { 
     Log.i("Classified Ad","srcAgency"); 
     new srcAgency().execute(); 
     srcAgency srcagen = new srcAgency(); 
     strdata = srcagen.strtempdata; 

     Log.i("AgencyData2", strdata); 
     Log.i("AgencyData3", strerrmess); 
     if(strerrmess.equals("")) 
     { 
      strarr= fun1.split(strdata, "^"); 
      aaagency = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item , strarr); 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Agency"); 
      builder.setAdapter(aaagency, new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int item) 
       { 
        txtAgency.setText(strarr[item]); 
       } 
      }); 
      builder.show(); 
     } 
    } 

     class srcAgency extends AsyncTask<Void, String, Void> 
    { 
     String strtempdata=""; 
     ProgressDialog dialog; 
     @Override 
     protected void onPreExecute() 
     { 
      strerrmess=""; 
      super.onPreExecute(); 
      dialog = ProgressDialog.show(classified.this, "", "Please wait...", true); 
      dialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... unused) 
     { 
      try 
      { 
       stragency = txtAgency.getText().toString().trim(); 
       intagencyBrac1= stragency.lastIndexOf('('); 
       intagencyBrac2= stragency.lastIndexOf(')'); 

       if (stragency.length() < 3) 
       {strerrmess="Please Enter atleast 3 Characters for Agency Searching";} 
       else if(intagencyBrac1>=0||intagencyBrac2>=0) 
       {strerrmess="Please Enter Characters for Agency Searching";} 
       else 
       { 
        if(stragency.indexOf(' ')!=-1) 
        {stragency = stragency.replace(' ', '!');} 


        Log.i("AgencyUrl",strurl); 
        strdata = "Client1^Client2^Client3^Client4^Client5^Client6^Client1"; 
        Log.i("AgencyData",strdata); 
        strtempdata = strdata; 
        if(!strdata.equals("")) 
        { 

        } 
        else 
        {strerrmess ="No Data Available";} 
       } 
      } 
      catch(Exception e) 
      { 

      } 
      return null; 

     } 

     @Override 
     protected void onPostExecute(Void unused) 
     { 
      dialog.dismiss(); 
      if (strerrmess.equals("Please Enter atleast 3 Characters for Agency Searching")) 
      {Toast(strerrmess);intflag=1;} 
      else if(strerrmess.equals("Please Enter Characters for Agency Searching")) 
      {Toast(strerrmess);intflag=1;} 
      else if(strerrmess.equals("Your Session Got Expired. Please login again.")) 
      { 
       Intent intent = new Intent(classified.this, loginscreen.class); 
       startActivity(intent); 
       Toast(strerrmess); 
       intflag=1; 
      } 
      else 
      {intflag=0;} 
     } 
    } 
} 

我無法得到我已經在的AsyncTask功能在srcagency函數初始化的strdata值警告對話框之前設置進度條。我該怎麼辦?儘管strdata是一個全局變量。問題,其中有一個微調

我也試過,但我認爲你不能在onpostexecute函數初始化數組適配器...

@Override 
     protected void onPostExecute(Void unused) 
     { 
      dialog.dismiss(); 
      if (strerrmess.equals("Please Enter atleast 3 Characters for Agency Searching")) 
      {Toast(strerrmess);intflag=1;} 
      else if(strerrmess.equals("Please Enter Characters for Agency Searching")) 
      {Toast(strerrmess);intflag=1;} 
      else if(strerrmess.equals("Your Session Got Expired. Please login again.")) 
      { 
       Intent intent = new Intent(classified.this, loginscreen.class); 
       startActivity(intent); 
       Toast(strerrmess); 
       intflag=1; 
      } 
      else 
      {strarr= fun1.split(strdata, "^"); 
      aaagency = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item , strarr); 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Agency"); 
      builder.setAdapter(aaagency, new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int item) 
       { 
        txtAgency.setText(strarr[item]); 
       } 
      }); 
      builder.show();} 
     } 

任何幫助或意見,將不勝感激。

感謝

+0

我認爲你應該用較不具體的信息重新格式化你的文章。所有這些字符串等,只是混淆了這個問題。根據你有什麼以及你想達到什麼來分解它。沒有上下文的時候,破碎和凌亂的代碼牆不會幫助任何人。 – 2011-03-24 06:57:19

回答

0
Log.i("Classified Ad","srcAgency"); 
new srcAgency().execute(); 
srcAgency srcagen = new srcAgency(); 
strdata = srcagen.strtempdata; 

這是行不通的。你是說,啓動的AsyncTask,將設置你的strData是在未來的某個時候,但也立即返回,並創建一個新的AsyncTask之後有它知道最後的AsyncTask一樣。

試試這個:

void srcAgency(View v){ 
//We only want to start the AsyncTask here, nothing else. 
// Whatever you did before and whatever triggered the srcAgency(View) method 
srcAgency srcagen = new srcAgency(); 
srcagen.execute(); 
return; 
} 



public void realSrcAgency(View v) { 
... // The rest of original srcAgency(View) 
} 

// Inside of asyncTask srcAgency ... 
public void postExecute() { 
    // Call the new method we just had, but after our asyncTask is done. 
    realSrcAgency(null); 
} 

基本上你不能指望所有的這些事情同時發生。如果你減少了你的代碼的細節,這將很容易幫助你。看起來你只是想要一個按鈕或點擊來啓動一個填充字符串的異步任務。然而,在這個字符串被填充之後,就會對它做其他事情此外,我不相信你需要任何這樣的異步任務。