제가 메인화면에서 물품명이랑 수량을 적어서 저장을 누르면
데이터베이스를 만들고 다음화면으로 목록 화면이(이전 화면에서 저장시킨 자료를 포함하는 목록화면) 뜨게 하려고 하는데요.
저장을 누르면 다음화면으로 넘어가질 않고 에뮬에서 종료되어버립니다.
메인이 이렇고..
public void mOnClick(View v){
SQLiteDatabase db;
String sql;
switch (v.getId()) {
case R.id.insert: //추가 버튼(insert)
String name = nameEdit.getText().toString();
String amount = amountEdit.getText().toString();
db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO waterlist VALUES(NULL, '%s', '%s');", name, amount);
db.execSQL(sql);
Intent intent = new Intent(testdb.this, dbdb.class);
startActivity(intent);
break;
}
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE waterlist (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
" name TEXT, age INTEGER);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS waterlist");
onCreate(db);
}
}
}
다음액티비티에서는
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.db);
SQLiteDatabase db;
String sql;
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM waterlist;";
Cursor cursor = db.rawQuery(sql, null);
if(cursor.getCount() > 0){
while(cursor.moveToNext()){
result.append(String.format("\n물품명 = %s, 수량 = %s",
cursor.getString(1), cursor.getString(2)));
}
}else{
result.append("\n조회결과가 없습니다.");
}
cursor.close();
요렇게 되는 데요.
이전 액티비티에서 저장한 디비를 불러오질 못하는 걸까요?
도대체 뭐가 문제일까요?
그리고 참고로 로그캣도 올립니다.ㅜㅜ
06-12 01:36:22.703: E/ActivityThread(635): Failed to find provider info for com.andro.poroject
06-12 01:36:22.703: D/AndroidRuntime(635): Shutting down VM
06-12 01:36:22.703: W/dalvikvm(635): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
06-12 01:36:22.723: E/AndroidRuntime(635): FATAL EXCEPTION: main
06-12 01:36:22.723: E/AndroidRuntime(635): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andro.project/com.andro.project.dbdb}: java.lang.NullPointerException
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.ActivityThread.access$600(ActivityThread.java:122)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.os.Handler.dispatchMessage(Handler.java:99)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.os.Looper.loop(Looper.java:137)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.ActivityThread.main(ActivityThread.java:4340)
06-12 01:36:22.723: E/AndroidRuntime(635): at java.lang.reflect.Method.invokeNative(Native Method)
06-12 01:36:22.723: E/AndroidRuntime(635): at java.lang.reflect.Method.invoke(Method.java:511)
06-12 01:36:22.723: E/AndroidRuntime(635): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-12 01:36:22.723: E/AndroidRuntime(635): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-12 01:36:22.723: E/AndroidRuntime(635): at dalvik.system.NativeStart.main(Native Method)
06-12 01:36:22.723: E/AndroidRuntime(635): Caused by: java.lang.NullPointerException
06-12 01:36:22.723: E/AndroidRuntime(635): at com.andro.project.dbdb.onCreate(dbdb.java:39)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.Activity.performCreate(Activity.java:4465)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-12 01:36:22.723: E/AndroidRuntime(635): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
06-12 01:36:22.723: E/AndroidRuntime(635): ... 11 more
메인에 요렇게 디비헬퍼를 만들었는데...아닌가요?;;
public class testdb extends Activity {
EditText nameEdit;
EditText amountEdit;
ImageButton insertBtn;
DBHelper dbHelper;
final static String dbName = "waterlist.db";
final static int dbVersion = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dbtest);
// TODO Auto-generated method stub
nameEdit = (EditText)findViewById(R.id.nameedit);
amountEdit = (EditText)findViewById(R.id.amountedit);
dbHelper = new DBHelper(this, dbName, null, dbVersion);
}
TextView result;
DBHelper dbHelper;
final static String dbName = "waterlist.db";
final static int dbVersion = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.db);
dbHelper = new DBHelper(this, dbName, null, dbVersion);
}
public void mOnClick(View v){
SQLiteDatabase db;
String sql;
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM waterlist;";
Cursor cursor = db.rawQuery(sql, null);
if(cursor.getCount() > 0){
while(cursor.moveToNext()){
result.append(String.format("\n물품명 = %s, 수량 = %s",
cursor.getString(1), cursor.getString(2)));
}
}else{
result.append("\n조회결과가 없습니다.");
}
cursor.close();
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper{
//생성자 - database 파일을 생성한다.
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//DB 처음 만들때 호출. - 테이블 생성 등의 초기 처리.
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE waterlist (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
" name TEXT, age INTEGER);");
}
//DB 업그레이드 필요 시 호출. (version값에 따라 반응)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS waterlist");
onCreate(db);
}
}
}
불러오는쪽을 이렇게 수정했는데요.
에뮬에서 메인에서 데이터입력하고 버튼 누르면 넘어는 가는데 데이터를 못 받아오네요.ㅠㅠ
데이터베이스가 아예 안 만들어진걸까요?
public class SqlActivity extends Activity {
/** Called when the activity is first created. */
EditText nameEdit;
EditText amountEdit;
ImageButton insertBtn;
DBHelper dbHelper;
final static String dbName = "waterlist.db";
final static int dbVersion = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// TODO Auto-generated method stub
dbHelper = new DBHelper(this, dbName, null, dbVersion);
SQLiteDatabase db;
String sql;
db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO waterlist VALUES(NULL, '%s', '%s');", "name", 1);
db.execSQL(sql);
Intent intent = new Intent(this, dbdb.class);
startActivity(intent);
dbHelper.close();
}
public void mOnClick(View v){
}
}
class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE waterlist (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
" name TEXT, age INTEGER);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS waterlist");
onCreate(db);
}
}
받는쪽
public class dbdb extends Activity {
TextView result;
DBHelper dbHelper;
final static String dbName = "waterlist.db";
final static int dbVersion = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
result = new TextView(this);
setContentView(result);
dbHelper = new DBHelper(this, dbName, null, dbVersion);
SQLiteDatabase db;
String sql;
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM waterlist;";
Cursor cursor = db.rawQuery(sql, null);
if(cursor.getCount() > 0){
while(cursor.moveToNext()){
result.append(String.format("\n물품명 = %s, 수량 = %s",
cursor.getString(1), cursor.getString(2)));
}
}else{
result.append("\n조회결과가 없습니다.");
}
cursor.close();
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper{
//생성자 - database 파일을 생성한다.
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//DB 처음 만들때 호출. - 테이블 생성 등의 초기 처리.
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE waterlist (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
" name TEXT, age INTEGER);");
}
//DB 업그레이드 필요 시 호출. (version값에 따라 반응)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS waterlist");
onCreate(db);
}
}
}
저장되고 넘어가서 표시되는거 확인 나머진 알아서 ...




두 액티비티에서 dbHelper 생성이 없는데요? 디비 헬퍼가 없는데 디비가 만들어 지나요
첫번째 액티비티는 헬퍼 닫는거만 나오고 두번째 액티비티는 커서닫는 거만 있네요