일단 자바 소스와 로그만 올리겠습니다. xml은 main과 styles두개로 나눠져 있습니다.
package hjh.data.db;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SqliteDBTestActivity extends Activity implements View.OnTouchListener{
/** Called when the activity is first created. */
private Button createB, dropB, insertB, updateB, deleteB, selectB;
private EditText et1, et2, et3;
private SQLiteDatabase db;
private final static String DB_NAME="hjh.db"; //DB name setting
private final static int DB_MODE=Context.MODE_PRIVATE;
private final static String T_NAME="address";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createB = (Button)findViewById(R.id.b01);
dropB = (Button)findViewById(R.id.b02);
insertB = (Button)findViewById(R.id.b03);
updateB = (Button)findViewById(R.id.b04);
deleteB = (Button)findViewById(R.id.b05);
selectB = (Button)findViewById(R.id.bselect);
createB.setOnTouchListener(this); 로그보면 36라인에 오류가 널값오류가뜨는데 이유를 모르겠습니다.
dropB.setOnTouchListener(this);
insertB.setOnTouchListener(this);
updateB.setOnTouchListener(this);
deleteB.setOnTouchListener(this);
selectB.setOnTouchListener(this);
et1 = (EditText)findViewById(R.id.et01);
et2 = (EditText)findViewById(R.id.et02);
et3 = (EditText)findViewById(R.id.et03);
openDB();
}
//DB open
private void openDB(){
db = openOrCreateDatabase(DB_NAME, DB_MODE, null);
showToast("DB("+DB_NAME+")생성 or 열림");
}
//Message
private void showToast(String msg) {
// TODO Auto-generated method stub
Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(v == createB){
createTable();
}else if(v == dropB){
dropTable();
}else if(v == insertB){
insertData();
}else if(v == updateB){
updateData();
}else if(v == deleteB){
deleteData();
}else{ //v == selectB
selectData();
}
return false;
}
//SQL Process
private boolean execSQL(String sql){
try{
db.execSQL(sql);
return true;
}catch (SQLException se) {
// TODO: handle exception
return false;
}
}
//Data Select
private void selectData() {
// TODO Auto-generated method stub
String sql = "SELECT _id, name, addr FROM ";
sql += T_NAME;
sql += " WHERE _id = ";
sql += et1.getText().toString();
Log.e("selectData(): ",sql);
try{
Cursor cur = db.rawQuery(sql, null);
cur.moveToFirst();
if(cur.getCount() > 0){
et2.setText(cur.getString(1));
et3.setText(cur.getString(cur.getColumnIndex("addr")));
}else{
showToast("조회 데이타가 없습니다.");
}
}catch (SQLException se) {
// TODO: handle exception
Log.e("selectData()Error! : ",se.toString());
}
}
//Data Delete
private void deleteData() {
// TODO Auto-generated method stub
String sql = "DELETE FROM ";
sql += T_NAME;
sql += " WHERE _id = ";
sql += et1.getText().toString();
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")delete Error!");
}else{
showToast("Data("+T_NAME+")delete OK!");
}
}
//Data Update
private void updateData() {
// TODO Auto-generated method stub
String sql = "UPDATE ";
sql += T_NAME;
sql += " SET ";
sql += " name = '";
sql += et2.getText().toString();
sql += "', addr = '";
sql += et3.getText().toString();
sql += "' WHERE _id = ";
sql += et1.getText().toString();
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")update Error!");
}else{
showToast("Data("+T_NAME+")update OK!");
}
}
//Data Insert
private void insertData() {
// TODO Auto-generated method stub
String sql = "INSERT INTO ";
sql += T_NAME;
sql += "(name,addr,ddate) VALUES ( '";
sql += et2.getText().toString();
sql += "', '";
sql += et3.getText().toString();
sql += "', ";
sql += "date('now') )";
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")insert Error!");
}else{
showToast("Data("+T_NAME+")insert OK!");
}
}
//Table Drop
private void dropTable() {
// TODO Auto-generated method stub
String sql = "drop table ";
sql += T_NAME;
try{
db.execSQL(sql);
showToast("Table("+T_NAME+")삭제 완료!");
}catch (SQLException se) {
// TODO: handle exception
Log.e("dropTable()Error! : ",se.toString());
}
}
//Table Create
private void createTable() {
// TODO Auto-generated method stub
String sql = "create table ";
sql += T_NAME;
sql += "(_id integer primary key autoincrement, name text not null, ";
sql += "addr text default 'seoul', ddate date)";
try{
db.execSQL(sql);
showToast("Table("+T_NAME+")생성 완료!");
}catch (SQLException se) {
// TODO: handle exception
//Log.e("createTable()시오류 : ",se.toString());
}
}
}
로그
05-25 02:22:11.686: ERROR/Zygote(32): setreuid() failed. errno: 2
05-25 02:22:18.218: ERROR/Zygote(32): setreuid() failed. errno: 17
05-25 02:22:19.307: ERROR/BatteryService(58): usbOnlinePath not found
05-25 02:22:19.307: ERROR/BatteryService(58): batteryVoltagePath not found
05-25 02:22:19.307: ERROR/BatteryService(58): batteryTemperaturePath not found
05-25 02:22:19.326: ERROR/SurfaceFlinger(58): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
05-25 02:22:24.217: ERROR/EventHub(58): could not get driver version for /dev/input/mouse0, Not a typewriter
05-25 02:22:24.217: ERROR/EventHub(58): could not get driver version for /dev/input/mice, Not a typewriter
05-25 02:22:24.467: ERROR/System(58): Failure starting core service
05-25 02:22:24.467: ERROR/System(58): java.lang.SecurityException
05-25 02:22:24.467: ERROR/System(58): at android.os.BinderProxy.transact(Native Method)
05-25 02:22:24.467: ERROR/System(58): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
05-25 02:22:24.467: ERROR/System(58): at android.os.ServiceManager.addService(ServiceManager.java:72)
05-25 02:22:24.467: ERROR/System(58): at com.android.server.ServerThread.run(SystemServer.java:184)
05-25 02:22:25.316: ERROR/SoundPool(58): error loading /system/media/audio/ui/Effect_Tick.ogg
05-25 02:22:25.316: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressStandard.ogg
05-25 02:22:25.327: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressSpacebar.ogg
05-25 02:22:25.327: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressDelete.ogg
05-25 02:22:25.327: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressReturn.ogg
05-25 02:22:27.156: ERROR/ThrottleService(58): Could not open GPS configuration file /etc/gps.conf
05-25 02:22:28.955: ERROR/logwrapper(144): executing /system/bin/tc failed: No such file or directory
05-25 02:22:29.026: ERROR/logwrapper(145): executing /system/bin/tc failed: No such file or directory
05-25 02:22:29.127: ERROR/logwrapper(146): executing /system/bin/tc failed: No such file or directory
05-25 02:22:37.542: ERROR/HierarchicalStateMachine(58): TetherMaster - unhandledMessage: msg.what=3
05-25 02:22:56.763: ERROR/AndroidRuntime(263): FATAL EXCEPTION: main
05-25 02:22:56.763: ERROR/AndroidRuntime(263): java.lang.RuntimeException: Unable to start activity ComponentInfo{hjh.data.db/hjh.data.db.SqliteDBTestActivity}: java.lang.NullPointerException
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.os.Looper.loop(Looper.java:123)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at java.lang.reflect.Method.invoke(Method.java:521)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at dalvik.system.NativeStart.main(Native Method)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): Caused by: java.lang.NullPointerException
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at hjh.data.db.SqliteDBTestActivity.onCreate(SqliteDBTestActivity.java:36)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-25 02:22:56.763: ERROR/AndroidRuntime(263): ... 11 more
05-25 02:25:44.632: ERROR/AndroidRuntime(340): FATAL EXCEPTION: main
05-25 02:25:44.632: ERROR/AndroidRuntime(340): java.lang.RuntimeException: Unable to start activity ComponentInfo{hjh.data.db/hjh.data.db.SqliteDBTestActivity}: java.lang.NullPointerException
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.os.Looper.loop(Looper.java:123)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at java.lang.reflect.Method.invoke(Method.java:521)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at dalvik.system.NativeStart.main(Native Method)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): Caused by: java.lang.NullPointerException
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at hjh.data.db.SqliteDBTestActivity.onCreate(SqliteDBTestActivity.java:36)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-25 02:25:44.632: ERROR/AndroidRuntime(340): ... 11 more
05-25 02:26:08.992: ERROR/AndroidRuntime(357): FATAL EXCEPTION: main
05-25 02:26:08.992: ERROR/AndroidRuntime(357): java.lang.RuntimeException: Unable to start activity ComponentInfo{hjh.data.db/hjh.data.db.SqliteDBTestActivity}: java.lang.NullPointerException
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.os.Looper.loop(Looper.java:123)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at java.lang.reflect.Method.invoke(Method.java:521)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at dalvik.system.NativeStart.main(Native Method)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): Caused by: java.lang.NullPointerException
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at hjh.data.db.SqliteDBTestActivity.onCreate(SqliteDBTestActivity.java:36)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-25 02:26:08.992: ERROR/AndroidRuntime(357): ... 11 more
to 브레이커즈
음 36번 주석처리하고 실행했는데 똑같이 에뮬에서 The applicationSqliteDBTest(process hjh.data.db)has stopped unexpectedly. Please try again.문구나오네요..
로그는 보지 않았습니다만은.. 아 로그 보니까 37라인에서 널포인트 익셉션이 뜨네요.. 이유가먼지 ㅜㅠ
private Context mContext = this;
를 onCreate 위에 추가하고 36번재줄부터 들어가는 this를 전부 mContext로 바꾸고 실행해보세요.
이게 맞는지 모르겠지만 리스너 설정이 잘못된 거 같네요.
private Context mContext = this;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createB = (Button)findViewById(R.id.b01);
dropB = (Button)findViewById(R.id.b02);
insertB = (Button)findViewById(R.id.b03);
updateB = (Button)findViewById(R.id.b04);
deleteB = (Button)findViewById(R.id.b05);
selectB = (Button)findViewById(R.id.bselect);
createB.setOnTouchListener(mContext);
dropB.setOnTouchListener(mContext);
insertB.setOnTouchListener(mContext);
updateB.setOnTouchListener(mContext);
deleteB.setOnTouchListener(mContext);
selectB.setOnTouchListener(mContext);
말하신대로 변경해봤는데요.36라인부터 밑으로 오류가 뜨네요.
Description Resource Path Location Type
The method setOnTouchListener(View.OnTouchListener) in the type View is not applicable for the arguments (Context) SqliteDBTestActivity.java /SqliteDBTest/src/hjh/data/db line 44 Java Problem
이라고 뜨네요.
createB.setOnTouchListener(new View.OnTouchListener(){});
dropB.setOnTouchListener(new View.OnTouchListener(){});
insertB.setOnTouchListener(new View.OnTouchListener(){});
updateB.setOnTouchListener(new View.OnTouchListener(){});
deleteB.setOnTouchListener(new View.OnTouchListener(){});
selectB.setOnTouchListener(new View.OnTouchListener(){});
말하신대로 수정해 봤는데요 전부 View.OnTouchListener() 이 구문에서 에러가 발생하네요.
식사는 하셨나요?ㅎ
음.. 이클립스 소스보면 implements View.OnTouchListener 집어넣질 않았습니다.
복사하다가 잘못 복사됀건지 잘 모르겠네요.ㅜ 소스를 메모장파일로 첨부하겠습니다.
그리고 createB.setOnTouchListener((OnTouchListener) this);이렇게 수정해보았는데.. 에뮬레이터에서 어플이 뜨지 않더라구요.
인식을 못하는건지ㅜ
음.. 지금 다른곳에서 한번 해봤는데 implements View.OnTouchListener 여기는 이 구문이 없으면
createB.setOnTouchListener(this);
dropB.setOnTouchListener(this);
insertB.setOnTouchListener(this);
updateB.setOnTouchListener(this);
deleteB.setOnTouchListener(this);
selectB.setOnTouchListener(this);
이구문들 자체가 에러가 뜨네요 제 컴퓨터에서는 에러는 발견되지 않던데...ㅜ




db에러는 아닌거같고 36번째줄에 주석처리하고 실행해보세요. 아마 37번줄에서도 널포인터익셉션이 날 거 같네요.