java.lang.NullPointerException

エラーエラー

エラーログ

 状態:解決済  閲覧数:11,862  投稿日:2013-02-05  更新日:2013-08-02
java.lang.NullPointerException
eclipse.buildId=M20120208-0800
java.version=1.6.0_30

NullPointerException … ヌルポインタ例外 
null値(定義されていない値のこと)の参照型変数を参照しようとした時に発生する例外

オブジェクトが必要な場合に、アプリケーションが null を使おうとするとスロー
・null オブジェクトのインスタンスメソッドの呼び出し
・null オブジェクトのフィールドに対するアクセスまたは変更
・null の長さを配列であるかのように取得
・null のスロットを配列であるかのようにアクセスまたは修正
・null を Throwable 値であるかのようにスロー

対策
・System.out.println(); を各所に挿入してnull参照の変数を探す
・場所がわかったら、次はなぜその変数が null のままなのかの原因を探していく


NullPointerExceptionに限らず、 例外によって停止することがないようにする方法は、以下の3通り
A. 例外が起こるデータをチェック
B. 例外をキャッチ
C. 例外が起こりえない設計を行う

A. 例外が起こるデータをチェック
・事前に、その値がnullかどうかの確認を実施
・ if (★★ == null) {

B. 例外をキャッチ
・try { ◆◆ } catch (Exception e) {

C. 例外が起こりえない設計を行う
コンストラクタを使うことにより、 安全性の高く(NullPointerExceptionが発生しない)、 利用する場合にも使いやすいクラスを作成

実際に遭遇した例

 閲覧数:723 投稿日:2013-08-02 更新日:2013-08-02

エラーメッセージ


Sorry! The application ★★ has stopped unexpectedly.Please try again.


エラーログ


08-01 22:46:51.736: E/AndroidRuntime(278): FATAL EXCEPTION: main
08-01 22:46:51.736: E/AndroidRuntime(278): java.lang.NullPointerException
08-01 22:46:51.736: E/AndroidRuntime(278): at android.style.householdaccount.Item.onClick(Item.java:97)
内容
・「android.style.householdaccount」パッケージ「Item」クラス「onClick」メソッドを実行する際、「null値(定義されていない値のこと)の参照型変数を参照しようとした時に発生する例外」が発生したため、エラー


エラー発生箇所


▼/src/android/style/householdaccount/Item.java
    public void onClick(View v) {
    if(v==button2){//内訳サーチボタン
    // 正常起動時
     try{
      // クラスのインスタンス化
       SubOpenHelper helper = new SubOpenHelper(getApplicationContext(),"test.db3",1);
       //コンストラクタのデータを決める。コンテキスト、DBファイル名、バージョン。
   
       // データベースの設定
       SQLiteDatabase db;
       db = helper.getWritableDatabase();
       //データベースに書き込めるように設定
//        db.execSQL("insert into  Date_Table(Koumoku,Utiwake,Kingaku) values ('食事', 'ステーキ',1000);");
       db.execSQL("insert into  Date_Table(Item,Utiwake,Kingaku) values ('食事', 'ステーキ',1000);");
       //insertで行に追加
       dbtest1.setText("");
       //dbtest1の初期化
   
       // カーソルの設定
//        String[] cols = {"Koumoku","Utiwake","Kingaku"};
       String[] cols = {"Item","Utiwake","Kingaku"};
       Cursor c = db.query("Date_Table",cols,null, null, null, null, null,null);
       //カーソルのリストを作る。1:テーブル名、2:取得する列名(カラム等)の配列、
       //3&4:取得するレコードの条件、5:GROUP BY条件、6:「HAVING」条件、
       //7:「ORDER BY」条件、8:「limit」条件
       boolean isEof = c.moveToFirst();
       //カーソルを先頭に移動
       while (isEof) {
       //while文。カーソルが最後に行くまで繰り返す。
       dbtest1.append(c.getString(0));
       dbtest1.append(c.getString(1));
       dbtest1.append(String.valueOf(c.getInt(2)));
       //getString(0)メソッドで、カーソルの一行目を追加。2,3も同じ。
       isEof = c.moveToNext();}
       //次のリストにカーソルを移す。
       c.close();
       //終わったら閉じる。これがないとエラーとなる。データベースも。
       db.close();
      }
   
      // 異常終了時
      catch(SQLiteException e){
    dbtest1.setText("エラー");
       return;
      }
     }

・このコード自体に問題はない
・つまり、「エラー発生箇所」と「エラー原因箇所」は必ずしも一致しない


エラー原因


・「dbtest1」テキストオブジェクトがnull


エラー対応


▼/src/android/style/householdaccount/Item.java
・onCreateメソッド内にて、テキストオブジェクト取得
       /* コンポーネントの設定 */
       dbtest1 = (TextView)this.findViewById(R.id.dbtest1);


※つまり、この1行が抜けていたことが原因!


文字列リテラルがダブル・クォートによって正しく閉じられていません

プラグイン "org.eclipse.ui.workbench" からのコードの起動で問題が発生しました


×

ゲストコメント一覧

番号 内容 投稿日
1 ワークベンチ・ビューおよびスタンドアロン・アプリケーションで、サンプルロードすると、「java.lang.NullPointerException」が表示される。 2013-12-17
コメント件数 … 1件

週間人気ページランキング / 9-14 → 9-20
順位 ページタイトル抜粋 アクセス数
1 インポートされた ★★ は見つかりません | エラー 57
2 ○○は解決できないか、フィールドではありません | エラー(エラー) 26
3 いくつかのプロジェクトは、ワークスペース・ディレクトリーにすでに存在するため、インポートできません | エラー 22
3 Androidエミュレータで、PCキーボード入力を有効にしたい | エミュレータ(環境構築) 22
4 public 型 ★★ はそれ独自のファイル内に定義されなければなりません | エラー 21
5 この行に複数マーカーがあります | エラー(エラー) 20
6 「Android Studio 3.0.1」で、デザインプレビュー画面が表示されない。「waiting build for finish」が終わらない | Android Studio(IDE) 13
7 プラグイン "org.eclipse.ui.workbench" からのコードの起動で問題が発生しました | エラー(エラー) 9
8 Eclipse で「プロジェクト名」「パッケージ名」を変更する方法 | Eclipse(IDE) 7
8 Android Studio で、ソースコードが改行できない | Android Studio(IDE) 7
9 Eclipseが起動しない … ユーザ操作は待機中です | Eclipse(IDE) 6
9 内部エラーの表示中に内部エラーが発生しました | エラー 6
10 既存プロジェクトがインポート出来ない | プロジェクト(環境構築) 5
10 インポートされた java.io は見つかりません | エラー(エラー) 5
11 Android FAQ 4
11 ファイルのパスをコピーする方法と結果は、右クリックする場所で異なる | Android Studio(IDE) 4
11 ★★ を型に解決できません | エラー(エラー) 4
11 java.lang.NullPointerException | エラー(エラー) 4
11 キーバインドの競合が発生しました。 通常のアクセラレーター操作を妨げる可能性があります。 | エラー(エラー) 4
12 エラーが発生しました。ログ・ファイル ★★.log.を参照してください | エラー(エラー) 3
2024/9/21 1:01 更新