質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.83%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

NullPointerExceptionが出ます。アドバイスをいただけないでしょうか?

edoooooo
edoooooo

総合スコア476

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0グッド

0クリップ

3445閲覧

投稿2017/04/07 01:56

編集2017/04/07 02:13

java.lang.NullPointerExceptionが SQLiteDatabase db=memoDBHelper.getWritableDatabase();に出るのですが、なぜなのでしょうか?
アドバイスをいただけないでしょうか?
どうぞよろしくお願いします。
MemoDBHelper

java

1package com.example.android.sample.memo; 2 3import android.content.Context; 4import android.database.sqlite.SQLiteDatabase; 5import android.database.sqlite.SQLiteOpenHelper; 6 7/** 8 * Created by endoutaichi on 2017/04/06. 9 */ 10 11public class MemoDBHelper extends SQLiteOpenHelper { 12 13 public static final String DB_NAME="myapp.db"; 14 public static final int DB_VERSION=1; 15 public static final String CREATE_TABLE= 16 "create table " + UserContract.Users.TABLE_NAME + "(" + 17 UserContract.Users._ID+ " integer primary key autoincrement, " + 18 UserContract.Users.COL_TITLE + " title," + 19 UserContract.Users.COL_CONTENT + " content, +" + 20 UserContract.Users.COL_DATA + "data" + 21 ")"; 22 23 24 25 /**"create table"+ UserContract.Users.TABLE_NAME+"("+ 26 UserContract.Users._ID+"integer primary key autoincrement,"+ 27 UserContract.Users.COL_NAME+"text,"+ 28 UserContract.Users.COL_SCORE+"integer)"; 29 **/ 30 public static final String INIT_TABLE= 31 "insert into users (title,content,data)values" + 32 "('仕事','出張','5月3日'),"+ 33 "('遊び','海','8月4日'),"+ 34 "('買い物','ららぽーと','3月3日')"; 35 36 public static final String DROP_TABLE= 37 "drop table if exists users"; 38 39 public MemoDBHelper(Context c){ 40 super(c,DB_NAME,null,DB_VERSION); 41 } 42 43 44 @Override 45 public void onCreate(SQLiteDatabase sqLiteDatabase) { 46 47 //create table 48 sqLiteDatabase.execSQL(CREATE_TABLE); 49 //init table 50 sqLiteDatabase.execSQL(INIT_TABLE); 51 52 } 53 54 @Override 55 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 56 57 //drop table 58 sqLiteDatabase.execSQL(DROP_TABLE); 59 //onCreate 60 onCreate(sqLiteDatabase); 61 } 62} 63

MainActivity.java

java

1public class MainActivity extends AppCompatActivity { 2 // ListView 用アダプタ 3 SimpleAdapter mAdapter = null; 4 // ListView に設定するデーた 5 List<Map<String, String>> mList = null; 6 7 //open helper 8 //open db memoDBHelperに変更 9 MemoDBHelper memoDBHelper=new MemoDBHelper(this); 10 SQLiteDatabase db=memoDBHelper.getWritableDatabase(); 11 12 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 18 19 20 21 22 23 ListView list = (ListView) findViewById(R.id.listView); 24 mList = new ArrayList<Map<String, String>>(); 25 26 27 mAdapter = new SimpleAdapter(this, 28 mList, 29 //独自で定義したlayoutを適応する 30 android.R.layout.simple_list_item_2, 31 new String[]{"title", "content", "data"}, //Map側のkey 32 new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData} //layout側のTextViewId 表示させたいMapのkey順に合わせる 33 ); 34 35 // ListView にアダプターをセット 36 list.setAdapter(mAdapter); 37 38 39 // ListView のアイテム選択イベント 40 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 41 42 @Override 43 public void onItemClick( 44 AdapterView<?> parent, View view, int pos, long id) { 45 // 編集画面に渡すデータをセットし、表示 46 //この下は、ファイルとは関係ないonResume()からやる 47 Intent intent = new Intent(MainActivity.this, EditActivity.class); 48 intent.putExtra("NAME", mList.get(pos).get("filename")); 49 intent.putExtra("TITLE", mList.get(pos).get("title")); 50 intent.putExtra("CONTENT", mList.get(pos).get("content")); 51 intent.putExtra("DATA", mList.get(pos).get("data")); 52 53 startActivity(intent); 54 } 55 }); 56 57 // ListView をコンテキストメニューに登録 58 registerForContextMenu(list); 59 } 60 61 62 63 64 65 @Override 66 protected void onResume() { 67 super.onResume(); 68 69 70 // ListView 用アダプタのデータをクリア 71 mList.clear(); 72 73 /** 74 for (int i=0; i<files.length; i++) { 75 String fileName = files[i].getName(); 76 if (files[i].isFile() && fileName.endsWith(".txt")) { 77 78 データベースのデータを全取得してそれをリストに入れるのにこのようなfor分は、必要ではないのか? 79 多分whileでやってるから大丈夫 80 **/ 81 82 Integer id=null; 83 String title = null; 84 String content = null; 85 String data=null; 86 87 //ここからコピペ 88 89 //これはselect 90 Cursor c=null; 91 c=db.query( 92 UserContract.Users.TABLE_NAME, 93 null,//fields 94 null,//where 95 null,//where arg ここでは、多分何もせずに、全件取得して、リストに入れる 96 null,//groupBy 97 null,//having 98 null,//order by 99 null 100 ); 101 102 Log.v("DB_TEST","Count:"+c.getCount()); 103 while(c.moveToNext()){ 104 id=c.getInt(c.getColumnIndex(UserContract.Users._ID)); 105 title=c.getString(c.getColumnIndex(UserContract.Users.COL_TITLE)); 106 content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT)); 107 data=c.getString(c.getColumnIndex(UserContract.Users.COL_DATA)); 108 Log.v("DB_TEST"," id: "+id+ "title: "+title+ "content: "+content+" data: "+data); 109 //この上のLog不安 110 //Logだけじゃなくて、リストに入れる これ以降は、ファイルと共有できると思う 111 } 112 113 c.close(); 114 //close db 115 db.close(); 116 //この上こぴぺ 117 //このセットでlistを作っっている? 118 //ここここは、つかう。Mapにセットする 119 // ListView用のアダプタにデータをセット 120 Map<String, String> map = new HashMap<String, String>(); 121 map.put("title", title); 122 map.put("content", content); 123 map.put("data",data); 124 mList.add(map); 125 126 // ListView のデータ変更を表示に反映 127 mAdapter.notifyDataSetChanged(); 128 } 129

java

104-07 10:48:28.281 24469-24469/com.example.android.sample.memo E/AndroidRuntime: FATAL EXCEPTION: main 2 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.sample.memo/com.example.android.sample.memo.MainActivity}: java.lang.NullPointerException 3 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1994) 4 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095) 5 at android.app.ActivityThread.access$600(ActivityThread.java:137) 6 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

masaya_ohashi

2017/04/07 02:11

DBに接続がうまくできていないことが原因だと思います。MemoDBHelperというコードの方も見せていただかないと答えられません。
edoooooo

2017/04/07 02:12

承知いたしました。コードをすぐ載せます。

回答1

1

ベストアンサー

onCreateが実行されるまではActivityはContextを持っていません。なので、クラス初期化時にMemoDBHelperにthisを渡してはいけません。

Java

1// 初期化時に作ってはいけない 2MemoDBHelper memoDBHelper=new MemoDBHelper(this); 3SQLiteDatabase db=memoDBHelper.getWritableDatabase();

Java

1// メンバ変数宣言だけする 2MemoDBHelper memoDBHelper; 3SQLiteDatabase db; 4 5@Override 6protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 // この辺にもってくる 10 memoDBHelper = new MemoDBHelper(this); 11 db = memoDBHelper.getWritableDatabase(); 12

投稿2017/04/07 02:21

masaya_ohashi

総合スコア9206

edoooooo👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

edoooooo

2017/04/07 02:47

色々なクラスでそれに関するdb変数を使っていたので、全て、onCreate()などの中に入れたところ無事動きました。ありがとうございます
masaya_ohashi

2017/04/07 04:07

解決したならベストアンサーを選んで解決済みにしてください。ずっと未解決問題として残ってしまいます。
edoooooo

2017/04/07 10:11

遅くなりました。申し訳ありません。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.83%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。