【问题标题】:Null pointer Exception when calling asynch task from context从上下文调用异步任务时出现空指针异常
【发布时间】:2014-05-13 13:08:33
【问题描述】:

从上下文调用异步任务时,我的异步任务运行良好,但是, 将值设置为 textview 时出现空指针异常

我没有获得对 textview 的引用...请帮助我在从上下文类调用异步任务时如何获得引用...

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()
    {

    }

}

【问题讨论】:

  • 请发布完整的NovvTrend 课程。
  • 嗨,我发布了我的示例代码

标签: android android-listview android-asynctask


【解决方案1】:
MainActivity activity=new MainActivity();

永远不要使用new 实例化活动。它们不适合您想要进行的任何活动。

特别是在您的情况下:生命周期方法 onCreate() 不会为该活动对象运行,并且 TextView 引用是 null

如果您确实需要启动活动,请使用Intent

如果您只需要获取对活动的引用,请将其作为参数传递,例如

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

// call from MainActivity
otherObject.methodThatNeedsActivity(this);

【讨论】:

  • 无法启动活动组件信息错误
  • ... 在做什么?这也只是顶层问题,根本原因在于堆栈跟踪中的嵌套异常。
  • 感谢它的工作:) 我忘了创建一个空的构造函数...谢谢你的帮助!!!
猜你喜欢
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
相关资源
最近更新 更多