【问题标题】:App crashes whenn setting an onClickListener?设置 onClickListener 时应用程序崩溃?
【发布时间】:2012-01-12 19:53:43
【问题描述】:

大家好,我正在努力解决一个奇怪的问题。 我将 ViewFlipper 更改为 ViewPager,因为我的应用程序崩溃了。我发现崩溃的不是 Viewpager,而是 button.setOnClickListener 方法。我注释掉了其他所有内容,因此我注意到如果我使用该方法注释掉我的两个按钮,该应用程序可以正常工作。这不是 onClick() 里面的东西,我试了一下,即使它是空的,它也会崩溃。但这是我与之抗争的一些代码:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);




    MyPagerAdapter adapter = new MyPagerAdapter();
        ViewPager myPager = (ViewPager)findViewById(R.id.pager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(1);
    new Toolbox();    

push = (Button)findViewById(R.id.pushbutton);
             push.setOnClickListener(new OnClickListener() {


                public void onClick(View v) {
                    head=head_field.getText().toString();
                    note=note_field.getText().toString();
                    try {
                        Toolbox.createTask(userToken,task, Dashboard_id, head, note, service);
                        head_field.setText("");
                        note_field.setText("");
                    } catch (ProducteevException e) {
                        return;

                    }
                }
            });

这是按钮 xml 摘录:

<Button
             android:id="@+id/pushbutton"
             android:layout_width="200dp"
             android:layout_height="200dp"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="35dp"
             android:background="@drawable/push_button" />

这里是 LogCat

01-12 20:50:24.402: W/dalvikvm(28405): threadid=1: thread exiting with uncaught exception (group=0x40015578)
01-12 20:50:24.402: E/AndroidRuntime(28405): FATAL EXCEPTION: main
01-12 20:50:24.402: E/AndroidRuntime(28405): java.lang.RuntimeException: Unable to start activity ComponentInfo{producteev.push/producteev.push.Producteev_pushActivity}: java.lang.NullPointerException
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.os.Looper.loop(Looper.java:123)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.ActivityThread.main(ActivityThread.java:3687)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at java.lang.reflect.Method.invokeNative(Native Method)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at java.lang.reflect.Method.invoke(Method.java:507)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at dalvik.system.NativeStart.main(Native Method)
01-12 20:50:24.402: E/AndroidRuntime(28405): Caused by: java.lang.NullPointerException
01-12 20:50:24.402: E/AndroidRuntime(28405):    at producteev.push.Producteev_pushActivity.onCreate(Producteev_pushActivity.java:122)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-12 20:50:24.402: E/AndroidRuntime(28405):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
01-12 20:50:24.402: E/AndroidRuntime(28405):    ... 11 more

如果有人知道这个问题,那就太棒了。

【问题讨论】:

  • 看到这一行 01-12 20:50:24.402: E/AndroidRuntime(28405): at producteev.push.Producteev_pushActivity.onCreate(Producteev_pushActivity.java:122) 这是你最好的朋友,学习寻找你的包名来找出崩溃的原因

标签: android button crash onclick android-viewpager


【解决方案1】:

确保您的推送按钮 id 正确,您的 findViewById() 似乎返回 null...

【讨论】:

  • 是的,正如您在这里看到的那样:push = (Button)findViewById(R.id.pushbutton); == android:id="@+id/pushbutton" 但你是对的,它返回 null!!!
  • 我看到了,但是你可以在设置点击监听器的那一行打断点,看看你的按钮对象是否为空
  • 如果返回 null,请发布您的完整代码,以便我们更好地帮助您
  • 您的按钮位于您设置为 contentView 的布局 xml main 上?
  • 解决了。愚蠢的错误。我在添加 Viewpager 时更改了主布局,因此 Button 不再位于 Main 中,因此 findViewById 找不到任何内容。现在我使用了 LayouInflater 来获得正确的视图。非常感谢
【解决方案2】:

由于我看不到您的全部代码,因此很难确定,但似乎错误可能是在创建时从您的堆栈跟踪中抛出的。由于在 onClick() 方法中没有发生任何事情,我唯一能想到的另一件事是 push 必须为空,从您发布的代码中。如果这是问题,这可能是由于 ID 不正确(传递到 findViewById() 调用的那个),或者如果编译器对您传入的 id 似乎没问题(我认为它会'否则不编译)它可能是 (Button) 的铸件无法正常工作。我会检查您的R.id.pushbutton 的实际类类型,并确保它是(Button)

【讨论】:

  • 是的,正如您在 XML 中看到的那样,它是一个 Button,而且 Eclipse 还说 R.id.pushbutton 没问题,它也是正确的。
  • 啊,对了——错过了在上面看到你的 XML ......你是否有可能覆盖 findViewByID() 方法并且那里没有返回一些东西?即您以某种方式从该覆盖返回 null ?如果可能的话,查看更多该 Java 所在的类可能会更容易帮助调试。
  • 解决了。愚蠢的错误。我在添加 Viewpager 时更改了主布局,因此 Button 不再位于 Main 中,因此 findViewById 找不到任何内容。现在我使用了 LayouInflater 来获得正确的视图。非常感谢
猜你喜欢
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
相关资源
最近更新 更多