0

簡単な Android チュートリアルを実行しようとしています。私はすでにいくつか書いていますが、ソースが見つからないというエラーが少し誤解を招くと思うようになったので無視しますが、これはスタック トレースとコードです。ヌル ポインターのように見えますが、解決できないようです。

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

はい、それは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

get ボタンと set ボタンが null でないことを確認してください。それらがボタンのIDであると確信していますか? それらがあなたのプロジェクトに試みたIDである場合、時々めちゃくちゃになるので、生成されたファイルをClean手動で削除するかもしれません。R.java

于 2011-08-03T21:40:27.653 に答える
0

クラスで DBAdapter が初期化されていることに気付きました。データベース アダプタを使用しているときに、数日前に同様のヌル ポインタ例外の問題に直面しました。

基本的に、DBAdapter がこのアクティビティでデータベースにアクセスしようとする前に、データベースがアクティビティ ライフサイクルのどこかで閉じられているか、適切に開かれていないことが問題である可能性があります。

したがって、私の提案は、アプリケーション内のデータベースの close() 呼び出しをコメントアウトし、DBAdapter がデータベースにアクセスして再実行を試みる前に、データベースが開いて初期化されていることを確認することです。

私の場合、問題は、呼び出しアクティビティの Activity.OnStop() 関数で、データベースを close() する呼び出しを行っていたことです。これで、アクティビティがサブアクティビティによって非表示になるたびに OnStop() が呼び出されるため、サブアクティビティの DBAdapter がデータベースにアクセスしようとすると、エラーが発生し、null ポインタ例外が発生しました

アクティビティのライフサイクルは次のとおりです - http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle

于 2011-08-05T17:50:31.507 に答える