Question

My asynch task working well when calling asynch task from context but, when setting the values to textview getting null pointer exception

Am not getting reference to textview...Please help me how to get reference when calling asynch task from context class...

05-14 11:44:45.279: E/AndroidRuntime(18314): FATAL EXCEPTION: main
05-14 11:44:45.279: E/AndroidRuntime(18314): Process: com.example.asynctest, PID: 18314
05-14 11:44:45.279: E/AndroidRuntime(18314): java.lang.NullPointerException
05-14 11:44:45.279: E/AndroidRuntime(18314):    at com.example.asynctest.MainActivity$MyAsync.onPostExecute(MainActivity.java:50)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at com.example.asynctest.MainActivity$MyAsync.onPostExecute(MainActivity.java:1)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at android.os.AsyncTask.finish(AsyncTask.java:632)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at android.os.Looper.loop(Looper.java:136)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at android.app.ActivityThread.main(ActivityThread.java:5102)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at java.lang.reflect.Method.invokeNative(Native Method)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at java.lang.reflect.Method.invoke(Method.java:515)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
05-14 11:44:45.279: E/AndroidRuntime(18314):    at dalvik.system.NativeStart.main(Native Method)

MainClass.java

public class MainActivity extends Activity {

    TextView textView;
    String textctx;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView) findViewById(R.id.textView1);
        textView.setText("Main class Text");
        MyContextClass contextClass=new MyContextClass(this);
        contextClass.MyContextMethod();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void callfromcontext(String contexttext) {               

        new MyAsync().execute(contexttext);

    }

    class MyAsync extends AsyncTask<String, String, String>
    {

        @Override
        protected String doInBackground(String... params) {
            String sometext=params[0]; 
            return sometext;
        }

        @Override
        protected void onPostExecute(String result) {

            System.out.println("result"+result);            
            textView.setText(result);

        }


    }

}

MyContextClass.java

public class MyContextClass {

    Context context;
    public MyContextClass(Context ctx) 
    {
        this.context=ctx;           
        MainActivity activity=new MainActivity();
        String contexttext="Context Class Text";
        activity.callfromcontext(contexttext);
    }

    public void MyContextMethod()
    {

    }

}
Was it helpful?

Solution

MainActivity activity=new MainActivity();

Never instantiate activities with new. They won't be good for anything you'd want an activity for.

Specifically in your case: the lifecycle method onCreate() won't get run for that activity object and the TextView reference there is null.

If you really need to launch an activity, use an Intent.

If you just need to get a reference to your activity, pass it around as an argument, e.g.

void methodThatNeedsActivity(MainActivity activity) {
  activity.someMethod();
}

// call from MainActivity
otherObject.methodThatNeedsActivity(this);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top