설명을 하자면 schedule_activity에서 mId에 db에 있는 id 값을 가지고 있습니다. 그리고 intent를 사용해서 message_activity로 넘어 갈때 schedule_activity가 가지고 있는 id값을 message_activity로 넘겨줍니다. 같은 id값에 각 column에 저장하기 위해서 입니다.
그런데 message_activity로 넘어가는 버튼을 누르니 java.lang.NullPointerException 뜨고 message_activity 쪽에 문제로 뜨는것을 보고 이것저것 수정도 해보고 하는데 계속 같은 애러문이 뜹니다. 뭐가 문제인지......
짧게 말하자면 schedule_activity에서 가지고 있는 id 값을 message_activity에 무조건 id값이 같아야 하는 것입니다...그런데......애러 ㅜㅜ
아 그리고 다른 질문인데요 at com.android.calednar.MessageActivity$2.onCreate(MessageActivity$2.java:69) 이런 logcat에 애러가 뜨는데 이게 MessageActivity$2.class에 있는 69번째에 애러가 났다는 것인가요??
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ schedule_activity.class ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
public class ScheduleActivity$2 extends Activity implements OnClickListener { // 일정목록
// 추가하기
private MyDBHelper$2 mDBHelper;
private DBItem mDBItem;
private int mId;
private String today;
private Cursor cursor;
private SQLiteDatabase db;
private SimpleCursorAdapter adapter;
private TextView textDate;
private TextView startTime;
private TextView endTime;
private EditText editTitle;
private EditText editPoint;
private EditText editMemo;
private Button setTime;
private Button setMessage;
private Button save;
private Button cancel;
/*
* private TextView startTime; private TextView endTime;
*/
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.schedule);
textDate = (TextView) findViewById(R.id.day_text);
editTitle = (EditText) findViewById(R.id.title_edit);
editPoint = (EditText) findViewById(R.id.point_edit);
editMemo = (EditText) findViewById(R.id.memo_edit);
Intent intent = getIntent();
mId = intent.getIntExtra("ParamID", -1);
today = intent.getStringExtra("ParamDate");
mDBHelper = new MyDBHelper$2(this);
// 'Today class'에서 받은 ParamID 값이 있을 때(false)와 없을 때(true)
if (mId == -1) {
textDate.setText(today);
} else {
// MyDBHelper$2 _id 값으로 today 테이블에 있는 값을 받아옴
SQLiteDatabase db = mDBHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM "
+ mDBHelper.DATABASE_TABLE + " WHERE "
+ mDBHelper.KEY_ROWID + " = '" + mId + "'", null);
if (cursor.moveToNext()) {
editTitle.setText(cursor.getString(mDBHelper.FIND_BY_TITLE));
editPoint.setText(cursor.getString(mDBHelper.FIND_BY_POINT));
textDate.setText(cursor.getString(mDBHelper.FIND_BY_DATE));
editMemo.setText(cursor.getString(mDBHelper.FIND_BY_MEMO));
}
}
mDBHelper.close();
setTime = (Button) findViewById(R.id.time_set);
setTime.setOnClickListener(this);
setMessage = (Button) findViewById(R.id.message_set);
setMessage.setOnClickListener(this);
save = (Button) findViewById(R.id.save_button);
save.setOnClickListener(this);
cancel = (Button) findViewById(R.id.cancel);
cancel.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
db = mDBHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.message_set:
// message activity를 실행 하기 전 mId에 있는 값을 넘겨줌
Intent intentM = new Intent(this, MessageActivity$2.class);
intentM.putExtra("ParamID", mId);
startActivityForResult(intentM, 0);
break;
case R.id.time_set:
// time activity를 실행하기 전 mId에 있는 값을 넘겨줌
Intent intentT = new Intent(this, TimeActivity.class);
intentT.putExtra("ParamID", mId);
startActivityForResult(intentT, 0);
break;
case R.id.save_button:
db = mDBHelper.getWritableDatabase();
if (mId != -1) {
db.execSQL("UPDATE " + mDBHelper.DATABASE_TABLE + " SET "
+ mDBHelper.KEY_TITLE + "='"
+ editTitle.getText().toString() + "',"
+ mDBHelper.KEY_DATE + "='"
+ textDate.getText().toString() + "', "
+ mDBHelper.KEY_POINT + "='"
+ editPoint.getText().toString() + "', "
+ mDBHelper.KEY_MEMO + "='"
+ editMemo.getText().toString() + "' WHERE "
+ mDBHelper.KEY_ROWID + "='" + mId + "';");
Toast.makeText(this,
textDate.getText().toString() + "가 테이블에 수정되었습니다.",
Toast.LENGTH_LONG).show();
} else {
ContentValues newValues = new ContentValues();
newValues.put(mDBHelper.KEY_TITLE, editTitle.getText()
.toString());
newValues
.put(mDBHelper.KEY_DATE, textDate.getText().toString());
newValues.put(mDBHelper.KEY_POINT, editPoint.getText()
.toString());
newValues
.put(mDBHelper.KEY_MEMO, editMemo.getText().toString());
db.insert("today", null, newValues);
Toast.makeText(this, today + "가 테이블에 추가되었습니다.",
Toast.LENGTH_LONG).show();
}
mDBHelper.close();
setResult(RESULT_OK);
finish();
break;
case R.id.cancel:
setResult(RESULT_CANCELED);
finish();
break;
}
}
// message activity와 time activity를 저장하였을 때 그값을 result 하게 함
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode) {
case 0:
case 1:
if (resultCode == RESULT_OK) {
SQLiteDatabase db = mDBHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM "
+ mDBHelper.DATABASE_TABLE + " WHERE "
+ mDBHelper.KEY_ROWID + " = '" + mId + "'", null);
adapter.changeCursor(cursor);
mDBHelper.close();
}
break;
}
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ message_activity.class ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
public class MessageActivity$2 extends Activity implements OnClickListener {
private EditText messageText;
private Button save;
private Button cancel;
private Cursor cursor;
private MyDBHelper$2 mDBHelper;
private SQLiteDatabase db;
int mId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.message);
Intent intent = getIntent();
mDBHelper = new MyDBHelper$2(this);
mId = intent.getIntExtra("ParamID", -1);
messageText = (EditText) findViewById(R.id.message_edit);
String nullString = "";
messageText.setText(nullString);
if (mId == -1) {
messageText.setHint("메세지를 입력하세요");
}
else {
db = mDBHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM " + mDBHelper.DATABASE_TABLE
+ " WHERE " + mDBHelper.KEY_ROWID + " = '" + mId + "'",
null);
if (messageText == null) {
messageText.setHint("메세지를 입력하세요");
} else if (cursor.moveToNext()) {
messageText
.setText(cursor.getString(mDBHelper.FIND_BY_MESSAGE));
}
}
save = (Button) findViewById(R.id.save_button);
save.setOnClickListener(this);
cancel = (Button) findViewById(R.id.cancel);
cancel.setOnClickListener(this);
}
public void onClick(View v) {
db = mDBHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.save_button:
if (mId != -1) {
if(messageText == null){
messageText.setHint("메시지를 입력하세요");
} else {
db.execSQL("UPDATE " + mDBHelper.DATABASE_TABLE + " SET "
+ mDBHelper.KEY_MESSAGE + "='"
+ messageText.getText().toString() + "' WHERE "
+ mDBHelper.KEY_ROWID + "='" + mId + "';");
Toast.makeText(this, "메시지가 수정되었습니다.", Toast.LENGTH_LONG).show();
}
} else {
if(messageText == null){
messageText.setHint("메시지를 입력하세요");
} else {
ContentValues newValues = new ContentValues();
newValues.put(mDBHelper.KEY_MESSAGE, messageText.getText()
.toString());
db.insert(mDBHelper.DATABASE_TABLE, null, newValues);
Toast.makeText(this, "메시지가 저장되었습니다.", Toast.LENGTH_LONG).show();
}
}
setResult(RESULT_OK);
break;
case R.id.cancel:
setResult(RESULT_CANCELED);
break;
}
finish();
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ logcat error ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
11-21 14:07:11.214: E/AndroidRuntime(1481): FATAL EXCEPTION: main
11-21 14:07:11.214: E/AndroidRuntime(1481): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.calednar/com.android.calednar.MessageActivity$2}: java.lang.NullPointerException
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.os.Handler.dispatchMessage(Handler.java:99)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.os.Looper.loop(Looper.java:137)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.ActivityThread.main(ActivityThread.java:4424)
11-21 14:07:11.214: E/AndroidRuntime(1481): at java.lang.reflect.Method.invokeNative(Native Method)
11-21 14:07:11.214: E/AndroidRuntime(1481): at java.lang.reflect.Method.invoke(Method.java:511)
11-21 14:07:11.214: E/AndroidRuntime(1481): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-21 14:07:11.214: E/AndroidRuntime(1481): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-21 14:07:11.214: E/AndroidRuntime(1481): at dalvik.system.NativeStart.main(Native Method)
11-21 14:07:11.214: E/AndroidRuntime(1481): Caused by: java.lang.NullPointerException
11-21 14:07:11.214: E/AndroidRuntime(1481): at com.android.calednar.MessageActivity$2.onCreate(MessageActivity$2.java:69)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.Activity.performCreate(Activity.java:4465)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-21 14:07:11.214: E/AndroidRuntime(1481): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
11-21 14:07:11.214: E/AndroidRuntime(1481): ... 11 more
받는쪽에서 널포인트가 발생하는것 같습니다.
MessageActivity.69번째 라인을 확인해 보세요~