0

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

3 回答 3

0

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

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

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

就我而言,问题是在调用活动的 Activity.OnStop() 函数中,我调用了 close() 数据库。现在,每当子活动隐藏活动时都会调用 OnStop(),因此当我的子活动中的 DBAdapter 尝试访问数据库时,它会遇到错误并引发空指针异常

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

于 2011-08-05T17:50:31.507 回答
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此时必须为 null,这意味着它没有被正确初始化Button setButton = (Button)findViewById(R.id.go);

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

于 2011-08-03T21:46:55.403 回答
0

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

于 2011-08-03T21:40:27.653 回答