【问题标题】:NullPointerException during a performclick()performclick() 期间出现 NullPointerException
【发布时间】:2013-11-15 16:36:39
【问题描述】:

我正在对一项活动进行单元测试。我的活动有一个调用简单方法的按钮(没有活动、服务或其他任何东西)。

java.lang.NullPointerException 在 com.android.my.test.MyActivityTest.testPerformClick(MyActivity.java:41) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:205) 在 android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:195) 在 android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:175) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 在 android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)

我的测试是这样的:

public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity> {
    MyActivity a;

    public MyActivityTest() {
        super("com.android.my", MyActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        a = this.getActivity();
    }

    @Override
    public void tearDown() throws Exception {
        super.tearDown();
    }

    public void testPerformClick() {
        a.getButton().performClick();
    }

}

我的活动是这样的。

public class MyActivity extends Activity implements OnClickListener {

    private Button b;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        button = new Button();
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        method();
    }

    private void method() {
        // [...]
    }

    public void getButton() {
        return button();
    }
}

【问题讨论】:

  • aa.getButton()null
  • a.getButton 返回 null,但它应该返回活动按钮吗?
  • 如果您可以发布可编译的代码,这很有用。
  • 您的活动无法编译。 button 未定义,button() 也未定义
  • 对不起,我编辑了我的帖子。但我仍然得到 nullpoineexception

标签: java android nullpointerexception


【解决方案1】:

我的猜测是您需要将 MyActivity 更改为此。您的测试为方法 getButton() 得到一个 NULL

public class MyActivity extends Activity implements OnClickListener 
{
    private Button b;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        b=new Button();
        b.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) 
    {
        method();
    }

    private void method()
    {
        ...
    }

    public Button getButton()
    {
        return b;
    }
}

【讨论】:

  • 如果你使用上面的确切代码,还是同样的问题?
  • 那你还有其他问题。生成 NPE 是因为当您的测试调用 getButton() 时,它会返回一个 NULL 值。因此,当您测试调用 click 函数时,它会抛出 NPE。检查以确保您正在正确构建您的活动,并且您确实有一个非空的Buttonb。在代码中放置断点进行验证。
  • 每当我尝试返回视图元素时都会收到 nullpointerexception。为什么?我不能使用测试类的按钮吗?
  • 确保您的 onCreate 方法按照您认为的方式调用。
猜你喜欢
  • 1970-01-01
  • 2020-07-16
  • 2013-11-13
  • 2021-06-18
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多