Apparently the Activity you pass is null. And you seem to misunderstand what the UI thread is. A Context or an Activity is NOT the UI thread.
On Wed, Mar 10, 2010 at 12:24 AM, John Wesonga <johnweso...@gmail.com> wrote: > If this is so, why do I get a null pointer exception whenever I call > any method from the UI thread even after creating an instance of that > object? I tried passing the activity as an argument in the constructor > for the AsyncTask: > > Activity mParentActivity; > > public LoginTask(Context context,Activity act){ > this.ctx=context; > this.mParentActivity=act; > } > > onPostExecute(..){ > mParentActivity.callSomeMethod(); > } > > I get a NullPointerException when I tried this.. > > On Mar 8, 8:23 pm, Romain Guy <romain...@android.com> wrote: >> > Where ctx is a context object. I understand now that you can't call >> > methods from the UI thread in the AsyncTask. >> >> You can call method on the UI thread in AsyncTask, that's what it's >> for. But you cannot call method from other classes (like Context) >> unless you have instances of them. This is no different than in any >> other place of your application :) >> >> >> >> >> >> >> >> > On Mar 7, 1:08 am, John Wesonga <johnweso...@gmail.com> wrote: >> >> I figured something out which I thought would work, within my >> >> LoginTask class I created an object which was of the parent activity: >> >> >> Test101 mParentActivity; >> >> >> and then: >> >> >> protected void onPostExecute(String result) { >> >> >> Intent i=new Intent(ctx,SillyActivity.class); >> >> mParentActivity.startActivity(i); >> >> >> } >> >> >> An error is thrown: >> >> >> 03-07 01:04:50.259: ERROR/AndroidRuntime(801): Uncaught handler: >> >> thread main exiting due to uncaught exception >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): >> >> java.lang.NullPointerException >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> org.tutorial.test101.tasks.LoginTask.onPostExecute(LoginTask.java:46) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> org.tutorial.test101.tasks.LoginTask.onPostExecute(LoginTask.java:1) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> android.os.AsyncTask.finish(AsyncTask.java:416) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> android.os.AsyncTask.access$300(AsyncTask.java:127) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:428) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> android.os.Handler.dispatchMessage(Handler.java:99) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> android.os.Looper.loop(Looper.java:123) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> android.app.ActivityThread.main(ActivityThread.java:3948) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> java.lang.reflect.Method.invokeNative(Native Method) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> java.lang.reflect.Method.invoke(Method.java:521) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> com.android.internal.os.ZygoteInit >> >> $MethodAndArgsCaller.run(ZygoteInit.java:782) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) >> >> 03-07 01:04:50.319: ERROR/AndroidRuntime(801): at >> >> dalvik.system.NativeStart.main(Native Method) >> >> >> Stuck again it seems.. >> >> >> On Mar 6, 10:57 pm, John Wesonga <johnweso...@gmail.com> wrote: >> >> >> > I just modified my onPostExecute(...) method: >> >> >> > protected void onPostExecute(String result) { >> >> >> > Log.i("LOGGER", "Done..."); >> >> > pDialog.dismiss(); >> >> > if(result=="success"){ >> >> > Toast.makeText(ctx, "complete", >> >> > Toast.LENGTH_LONG).show(); >> >> > Intent i=new >> >> > Intent(ctx,SillyActivity.class); >> >> > startActivity(i); >> >> > }else{ >> >> > Toast.makeText(ctx, "fail", >> >> > Toast.LENGTH_LONG).show(); >> >> > } >> >> >> > super.onPostExecute(result); >> >> > } >> >> >> > ctx is my context >> >> > I noticed that I can't call the startActivity(Intent i) method within >> >> > the AsyncTask, how else would I start an activity from here? >> >> >> > On Mar 6, 10:13 pm, Romain Guy <romain...@android.com> wrote: >> >> >> > > onPostExecute() is invoked on the UI thread so you can use this method >> >> > > to start an Activity. It's pretty much what it's for. >> >> >> > > On Fri, Mar 5, 2010 at 6:29 AM, John Wesonga <johnweso...@gmail.com> >> >> > > wrote: >> >> > > > I have a simple app and I'm using the AsyncTask to test out a >> >> > > > background process, for clearness purposes I've opted to put my >> >> > > > AsyncTask in a separate class rather than in an inner class, which >> >> > > > where my problems begin, this is my AsyncTask >> >> >> > > > package org.tutorial.test101.tasks; >> >> >> > > > import android.app.ProgressDialog; >> >> > > > import android.content.Context; >> >> > > > import android.os.AsyncTask; >> >> > > > import android.util.Log; >> >> >> > > > public class LoginTask extends AsyncTask<String, String, String> { >> >> >> > > > Context ctx; >> >> > > > ProgressDialog pDialog; >> >> >> > > > public LoginTask(Context context){ >> >> > > > super(); >> >> > > > this.ctx=context; >> >> > > > } >> >> > > > �...@override >> >> > > > protected String doInBackground(String... params) { >> >> > > > Log.i("LOGGER", "Starting..."); >> >> > > > try{ >> >> > > > Thread.sleep(8000); >> >> > > > }catch(InterruptedException e){ >> >> >> > > > } >> >> > > > return null; >> >> > > > } >> >> >> > > > �...@override >> >> > > > protected void onPostExecute(String result) { >> >> >> > > > Log.i("LOGGER", "Done..."); >> >> > > > pDialog.dismiss(); >> >> > > > // >> >> > > > super.onPostExecute(result); >> >> > > > } >> >> >> > > > �...@override >> >> > > > protected void onPreExecute() { >> >> > > > pDialog=new ProgressDialog(ctx); >> >> > > > pDialog.setTitle("Login"); >> >> > > > pDialog.setMessage("doing stuff.."); >> >> > > > pDialog.show(); >> >> > > > } >> >> >> > > > } >> >> >> > > > What I'd like is that once the task is complete, I do something in >> >> > > > the >> >> > > > UI thread may be start another activity or even display a Toast >> >> > > > saying >> >> > > > activity complete. I know I can't start a new Activity in the >> >> > > > onPostExecute() so I need to start it in the UI thread any idea how >> >> > > > I >> >> > > > can do this? This is my Activity that starts the AsyncTask >> >> >> > > > package org.tutorial.test101.activities; >> >> >> > > > import org.tutorial.test101.tasks.LoginTask; >> >> >> > > > import android.app.Activity; >> >> > > > import android.app.Dialog; >> >> > > > import android.content.Context; >> >> > > > import android.os.AsyncTask; >> >> > > > import android.os.Bundle; >> >> > > > import android.util.Log; >> >> > > > import android.view.View; >> >> > > > import android.view.View.OnClickListener; >> >> > > > import android.widget.Button; >> >> >> > > > public class Test101 extends Activity{ >> >> > > > private Button btnLogin; >> >> > > > private LoginTask mLoginTask; >> >> > > > private Context context=this; >> >> > > > /** Called when the activity is first created. */ >> >> > > > �...@override >> >> > > > public void onCreate(Bundle savedInstanceState) { >> >> > > > super.onCreate(savedInstanceState); >> >> > > > setContentView(R.layout.main); >> >> > > > btnLogin=(Button)findViewById(R.id.btnLogin); >> >> > > > btnLogin.setOnClickListener(new OnClickListener(){ >> >> >> > > > public void onClick(View v) { >> >> > > > if(mLoginTask==null){ >> >> > > > mLoginTask=new >> >> > > > LoginTask(context); >> >> > > > mLoginTask.execute(null); >> >> > > > } >> >> >> > > > } >> >> >> > > > }); >> >> > > > } >> >> >> > > > } >> >> >> > > > -- >> >> > > > You received this message because you are subscribed to the Google >> >> > > > Groups "Android Developers" group. >> >> > > > To post to this group, send email to >> >> > > > android-developers@googlegroups.com >> >> > > > To unsubscribe from this group, send email to >> >> > > > android-developers+unsubscr...@googlegroups.com >> >> > > > For more options, visit this group at >> >> > > >http://groups.google.com/group/android-developers?hl=en >> >> >> > > -- >> >> > > Romain Guy >> >> > > Android framework engineer >> >> > > romain...@android.com >> >> >> > > Note: please don't send private questions to me, as I don't have time >> >> > > to provide private support. All such questions should be posted on >> >> > > public forums, where I and others can see and answer them >> >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "Android Developers" group. >> > To post to this group, send email to android-developers@googlegroups.com >> > To unsubscribe from this group, send email to >> > android-developers+unsubscr...@googlegroups.com >> > For more options, visit this group at >> >http://groups.google.com/group/android-developers?hl=en >> >> -- >> Romain Guy >> Android framework engineer >> romain...@android.com >> >> Note: please don't send private questions to me, as I don't have time >> to provide private support. All such questions should be posted on >> public forums, where I and others can see and answer them > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- Romain Guy Android framework engineer romain...@android.com Note: please don't send private questions to me, as I don't have time to provide private support. All such questions should be posted on public forums, where I and others can see and answer them -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en