Исключение или источник Android java.land.nullpointer не найден в onClick (Просмотреть v) - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь запустить простое руководство по 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 покажет.

<code><!-- 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"
/>
  <string name="press">Press Me!</string>
<string name="genRan">Generate Random Quote!</string> 
</code>

Ответы [ 3 ]

0 голосов
/ 04 августа 2011

Да, это правильный StackTrace из Logcat.Наиболее полезная информация находится в этих строках

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 сообщает вам, что у вас есть NullPointerExcepotion в строке 23 вашего класса RandomQuotes.Это строка 23 из вашего кода

setButton.setOnClickListener(mAddListener);

Так как вы получаете исключение NullPointerException, setButton должен быть нулевым на этом этапе, то есть он не был правильно инициализирован Button setButton = (Button)findViewById(R.id.go);.

Проверьте файл main.xml, чтобы убедиться, что вы объявили кнопку с атрибутом android:id="@+id/go".

0 голосов
/ 05 августа 2011

Я заметил, что у вас инициализирован DBAdapter в вашем классе.Я сталкивался с подобными проблемами исключений нулевого указателя несколько дней назад при использовании адаптеров базы данных.

По сути, проблема может заключаться в том, что база данных закрывается где-то в жизненном цикле активности или не открывается должным образом - ДО вашегоDBAdapter пытается получить доступ к базе данных в этом действии.

Поэтому я предлагаю - закомментировать любые вызовы close () базы данных в вашем приложении и проверить, что база данных открыта и инициализирована, прежде чем DBAdapter попытается получить к ней доступ ипопробуйте запустить снова.

В моем случае проблема заключалась в том, что в функции Activity.OnStop () в моей вызывающей деятельности я включил вызов close () базы данных.Теперь OnStop () вызывается всякий раз, когда действие скрыто подэтапом, поэтому, когда DBAdapter в моем подэтапе пытался получить доступ к базе данных, он обнаружил ошибку и возникло исключение нулевого указателя

ВотЖизненный цикл деятельности - http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle

0 голосов
/ 04 августа 2011

Убедитесь, что кнопки «получить» и «установить» не равны нулю.Вы уверены, что это идентификаторы ваших кнопок?Если это идентификаторы, попробуйте Clean ваш проект, возможно, даже вручную удалите сгенерированный файл R.java, потому что иногда он портится.

...