在onClick上找不到Android java.land.nullpointer异常或来源(View v)

时间:2011-08-03 21:32:17

标签: android nullpointerexception android-logcat

我正在尝试运行一个简单的Android教程。我已经写了一些,并且已经开始期望 source not found 错误有点误导,所以我忽略它,但这是一个堆栈跟踪和一些代码。它似乎是一些空指针,但我似乎无法解决它。

package com.rlee.randomquotes;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class RandomQuotes extends Activity {
    DBAdapter db = new DBAdapter(this);
    EditText Quote;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Capture our button from layout
        Button setButton = (Button)findViewById(R.id.go);
        Button getButton = (Button)findViewById(R.id.genRan);
        // Register the onClick listener with the implementation above
        setButton.setOnClickListener(mAddListener);
        getButton.setOnClickListener(mAddListener);
    }

    // Create an anonymous implementation of OnClickListener.

    private OnClickListener mAddListener = new OnClickListener()
    {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        }
    };

}

和错误

08-03 21:08:18.325: ERROR/jdwp(2383): Failed sending reply to debugger: Broken pipe
08-03 21:08:37.795: ERROR/AndroidRuntime(2383): FATAL EXCEPTION: main
08-03 21:08:37.795: ERROR/AndroidRuntime(2383): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.rlee.randomquotes/com.rlee.randomquotes.RandomQuotes}:  java.lang.NullPointerException
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.os.Looper.loop(Looper.java:130)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread.main(ActivityThread.java:3683)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at java.lang.reflect.Method.invokeNative(Native Method)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at java.lang.reflect.Method.invoke(Method.java:507)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at dalvik.system.NativeStart.main(Native Method)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383): Caused by: java.lang.NullPointerException
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at com.rlee.randomquotes.RandomQuotes.onCreate(RandomQuotes.java:23)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     ... 11 more
08-03 21:17:59.915: ERROR/power(852): Failed setting last user activity: g_error=0

这是来自LogCat的正确堆栈跟踪吗?错误在哪里?

main.xml和下面的string.xml是按钮初始化的位置。我说的是对的。希望这个html会显示出来。

<!-- language-all: lang-html --> <br/><pre><Button
android:id="@+id/go"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/press"
/>
<Button
android:id="@+id/genRan"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/genRan"
/></pre> <br/><pre>  <string name="press">Press Me!</string>
<string name="genRan">Generate Random Quote!</string> 

3 个答案:

答案 0 :(得分:0)

确保get和set按钮不为null。你确定那些是按钮的ID吗?如果这些是ids尝试Clean您的项目,甚至可能手动删除R.java生成的文件,因为有时它会搞砸。

答案 1 :(得分:0)

是的,这是来自Logcat的正确StackTrace。最有用的信息可以在这些行中找到

08-03 21:08:37.795: ERROR/AndroidRuntime(2383): Caused by: java.lang.NullPointerException
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at com.rlee.randomquotes.RandomQuotes.onCreate(RandomQuotes.java:23)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-03 21:08:37.795: ERROR/AndroidRuntime(2383):     ... 11 more

Logcat告诉您在RandomQuotes类的第23行有一个NullPointerExcepotion。这是您的代码中的第23行

setButton.setOnClickListener(mAddListener);

由于您收到NullPointerException,此时setButton必须为空,这意味着Button setButton = (Button)findViewById(R.id.go);未正确初始化它。

检查main.xml文件以确保已声明具有属性android:id="@+id/go"的按钮。

答案 2 :(得分:0)

我注意到你的班级正在初始化DBAdapter。几天前,当我使用数据库适配器时,我遇到了类似的空指针异常问题。

基本上,问题可能是数据库要么在活动生命周期的某个地方关闭,要么没有正确打开 - 在您的DBAdapter尝试访问此活动中的数据库之前。

所以我的建议是 - 在应用程序中注释掉任何数据库close()调用,并检查数据库是否已打开&amp;在DBAdapter尝试访问它并尝试再次运行之前初始化。

在我的情况下,问题是在我的调用活动的Activity.OnStop()函数中,我已经调用了close()数据库。现在,只要子活动隐藏了一个活动,就会调用OnStop(),所以当我的子活动中的DBAdapter试图访问数据库时,它会出现错误&amp;引发空指针异常

这是活动生命周期-http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle