проблема установки индикатора выполнения перед диалоговым окном предупреждения, в котором есть счетчик - PullRequest
0 голосов
/ 24 марта 2011
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 голосов
/ 24 марта 2011
 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);
}

По сути, вы не можете ожидать, что все это произойдет одновременно.Вам будет легко помочь, если вы урезаете специфику своего кода.Похоже, вы просто хотите кнопку или несколько щелчков, чтобы запустить асинхронную задачу, которая заполняет строки.Однако после того, как эта строка заполнена, сделайте что-нибудь еще с ней.Также я не верю, что вам нужно асинхронное задание для всего этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...