I assume that detach() is called on the UI thread (when it does). If that's
the case, um, you need thread synchronization here.

--
Kostya Vasilyev
26.10.2011 2:53 пользователь "Bluemercury" <[email protected]> написал:

> So im using an AsyncTask but i'm getting random null exceptions for the
> activity reference in the doInBackground method. Anyway here's the non inner
> public async task:
>
> public class QuadrosMobileActivityTask extends AsyncTask<Void, Void,
> Object>{
>  *protected QuadrosMobileActivity activity=null;*
> protected QuadrosMobileApplicationContext mApp;
>
> public QuadrosMobileActivityTask(*QuadrosMobileActivity activity*) {
>
> attach(*activity*);
> mApp=(QuadrosMobileApplicationContext)* activity.getApplication()*;
> }
>
> @Override
> protected void onPreExecute() {
> Logger.write("QuadrosMobileActivityTask ", " AsyncTask pre execution "+
> "Current Activity: "+*activity.getClass().getName()*, Logger.INFO);
>
> Intent broadcast = new Intent();
> broadcast.setAction("SHOW_PROGRESSBAR");
> mApp.sendBroadcast(broadcast);
> mApp.setProgressBarInitialState(ProgressBar.VISIBLE);
> }
>
> @Override
> protected Object doInBackground(Void... params) {
>
> if(*activity!=null*){
> try {
> Thread.sleep(2000);
> } catch (InterruptedException e) {
> e.printStackTrace();
> }
> Logger.write("QuadrosMobileActivityTask ", " AsyncTask background
> initialized "+"Current Activity: 
> "+*activity.getClass().getName(),*Logger.INFO);
> return *activity.doBackGroundRequest(); -->getting random null exceptions
> for activity reference*
> }else{
> Logger.write("QuadrosMobileActivityTask ", "AsyncTask finished while no
> Activity was attached.", Logger.INFO);
> return null;}
>
> }
>
>
> @Override
> protected void onPostExecute(Object result) {
>
> if(*activity!=null*){
> Logger.write("QuadrosMobileActivityTask ", " AsyncTask post execution
> "+"Current Activity: "+*activity.getClass().getName()*, Logger.INFO);
>  //update results
> *activity.updateResultsInUi(result);*
>  mApp.getAsyncTasks().remove(this);
>
> //check if there's more tasks in the collection
> if(mApp.getAsyncTasks().isEmpty()){
> Intent broadcast = new Intent();
>         broadcast.setAction("HIDE_PROGRESSBAR");
>         mApp.sendBroadcast(broadcast);
>         mApp.setProgressBarInitialState(ProgressBar.GONE);
>  }
> }
>  }
>
> void detach() {
> *activity=null;*
> }
>
> void attach(QuadrosMobileActivity *activity*) {
> *this.activity=activity;*
> }
> }
>
> Is there any reason this should even happen???does the sleep timer is
> really necessary for waiting after the rotation is finished?
>
> regards,
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to