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)
回答1件
あなたの回答
tips
プレビュー