我正在尝试运行一个简单的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>
答案 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