首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.lang.NullPointerException:尝试调用虚方法的android.app.ActivityThread$ApplicationThread

java.lang.NullPointerException:尝试调用虚方法的android.app.ActivityThread$ApplicationThread
EN

Stack Overflow用户
提问于 2018-12-13 01:21:16
回答 2查看 5.5K关注 0票数 0

我知道这可能是重复的,但我的情况不同,这需要对这个特定问题进行一些解释。

我得到了一个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

onClick中,从类MyCalendar调用addEvent方法

代码语言:javascript
复制
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyCalendar myCalendar = new MyCalendar();
            myCalendar.addEvent();
          //  myCalendar.AddEvent(2,context);
       }
    });

它调用下面的方法

代码语言:javascript
复制
public void addEvent(){
    Calendar beginTime = Calendar.getInstance();
    beginTime.set(2018, 11, 14, 7, 30);
    Calendar endTime = Calendar.getInstance();
    endTime.set(2018, 11, 14, 8, 30);
        Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
            .putExtra(Events.TITLE, "TEST ANDROID")
            .putExtra(Events.DESCRIPTION, "EVENT HAS BEEN ADDED FROM ANDROID STUDIO")
            .putExtra(Events.EVENT_LOCATION, "GIBRALTAR")
            .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
            .putExtra(Events.CALENDAR_ID, 2)
            .putExtra(Intent.EXTRA_EMAIL, "example@test.com");
    startActivity(intent);
}

此方法在MainActivity中声明时确实有效,但现在我已将其移动到另一个类,它显示了上面的异常。

我该如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-13 07:03:00

您需要将调用活动作为上下文参数传递给new MyCalendar(context)调用。然后从您的calendar类调用context.startActivity(intent)

票数 4
EN

Stack Overflow用户

发布于 2018-12-13 01:53:10

下面要做的是向calendar类添加一个新方法

代码语言:javascript
复制
class Calendar {
...
private Context controller
 public void setController(Context cnts){ this.controller = cnts}
public void addEvent(){
// change it to
controller.startActivity(intent);
}
}

在Onclick方法中

代码语言:javascript
复制
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyCalendar myCalendar = new MyCalendar();
            myCalender.setController(this.MainActivity)
            myCalendar.addEvent();
          //  myCalendar.AddEvent(2,context);
       }

我使用kotlin。并且我在Java中是生疏的(如果语法错误,很抱歉);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53748248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档