在具有微调器的警报对话框之前设置进度条的问题

时间:2011-03-24 05:28:53

标签: java android android-asynctask

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;}
        }
    }
}

我无法获得我在strdata函数中的asynctask函数中初始化的srcagency的值。我该怎么办?即使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();}
        }

任何帮助或意见将不胜感激。

由于

1 个答案:

答案 0 :(得分: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);
}

基本上你不能指望所有这些事情同时发生。如果你减少了代码的细节,那么很容易帮助你。看起来你只是想要一个按钮或一些点击来启动填充字符串的异步任务。但是在填充该字符串后,请使用它执行其他操作。此外,我不认为您需要任何异步任务。