2011-08-03 30 views
0

我正在尝试运行一个简单的Android教程。我已经写了几个了,期待源找不到错误有点误导,所以我忽略它,但这是一个堆栈跟踪和一些代码。它似乎是一些空指针,但我似乎无法解决它。Android java.land.nullpointer在onClick上找不到异常或来源(View v)

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> 
+0

我也有过这样乱报价教程,但它显示空指针异常对仿真器按钮点击敬酒,如果你想学习数据库,这是一个更好的教程http://www.anotherandroidblog.com/2010/08/04/android-database-tutorial/ –

+0

谢谢,我会做的。但是我会坚持去找出为什么我会得到这些错误,我喜欢下面的aweser,我会尝试并更新。 – iSimply

回答

0

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

+1

是的我以前有过同样的问题。在尝试setOnClicks之前,先浏览代码并确保这两个按钮都不是空的。 – Jack

+0

非常有见地。我会看看,谢谢。 – iSimply

+0

我真的觉得干净必须ahve工作,我没有得到删除R.java,但由于某些原因,它现在的工作。很想理解这一点。 – iSimply

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"的按钮。

+0

听起来不错,只需编辑您的原始问题以包含XML。这将让你正确地格式化一切。 – theisenp

+0

谢谢,明白了。下次我会花更多的时间阅读,而不是很激动的回复。 – iSimply

0

我注意到u有将对DBAdapter在你的类被初始化。我面对使用数据库适配器时,类似的空指针异常发出几天就回来。

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

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

在我的情况下,问题是,在我的呼唤活动Activity.OnStop()函数,我已经把在调用close()数据库。现在,调用OnStop()每当活动是由一个子活动隐藏被调用,所以当我在子活动将对DBAdapter试图访问数据库,它击中了一个错误&引发空指针异常

这里的活动生命周期-http://developer.android.com/guide/topics/fundamentals/activities。HTML#生命周期

+0

最奇怪的事情发生了。第一次我已经注释掉setButtonListeners,我停止了让所有的错误,然后我看了你的帖子,所以我注释掉将对DBAdapter,它仍然工作,然后我记得我曾评论了听众,所以我注释掉他们来说,这仍然工作,所以我取消了DBAdapter的注释,它仍然有效,没有错误。很奇怪。但是我会密切关注数据库关闭调用。听起来非常合理,它可能是最重要的。 – iSimply

+0

嗯,这是很荒谬的,现在,我注释掉了整个教程,并设置它去,而这一切的作品。我只能猜测,干净的我没有更新R.java类。但除此之外,没有什么改变。任何人有任何想法? – iSimply