수십번 수백번 고쳐보고 네이버 구글에서 관련 소스 전부 찾아서 써 봐도 되지 않는 부분이 있어 문의 올립니다
CursorAdapter를 이용하여 Adapter를 만들고 데이터베이스에 자료를 저장하여 리스트에 표시하는 프로그램인데요
내용을 입력하고 Add버튼을 누르면 추가된 항목이 리스트에 바로 갱신돼서 떠야 하는데
null pointer인지 버그때문인지 프로그램이 에러메시지를 남기고 튕깁니다
프로그램을 다시 실행해보면 데이터베이스에 새로 추가한 내용이 저장되어있고 리스트에 뜹니다
하지만 리스트가 떠 있는 상태에서 데이터베이스의 내용을 변경했을때 그 내용이 바로 갱신되지 않는다는게 문제입니다
notifyDataSetChanged() 함수를 이용하면 리스트가 갱신된다는데
그 함수를 호출할때 튕깁니다
데이터베이스에 데이터가 저장되고 다시 쿼리하는부분까지 문제없이 되는데
notifyDataSetChanged()함수만 만나면 튕겨버리네요
단순히 교재에 나와있는 ArrayAdapter를 이용한 리스트 편집 예제에서 notifyDataSetChanged()함수는 잘 동작하는데
왜 CursorAdapter를 이용한 데이터베이스 리스트 편집 프로그램에서는 튕기는 걸까요
제가 모르는게 너무 많아서 글이 길어지네요..
많은 조언 부탁드립니다

package com.tabex;

import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import android.widget.TabHost.TabSpec;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.view.View.OnClickListener;

public class tabex extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
 scheduleCursorAdapter Adapter;
 SQLiteDatabase db;
 scheduleDBHelper mHelper;
 ListView list;
 Cursor cursor;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mHelper = new scheduleDBHelper(this);
       
        TabHost tabhost = (TabHost)findViewById(android.R.id.tabhost);
        tabhost.setup();
        TabSpec ts1 = tabhost.newTabSpec("tag1");
        ts1.setIndicator("tab1"); ts1.setContent(R.id.tab1); tabhost.addTab(ts1);
        ts1 = tabhost.newTabSpec("tag2");
        ts1.setIndicator("tab2"); ts1.setContent(R.id.tab2); tabhost.addTab(ts1);
        ts1 = tabhost.newTabSpec("tag3");
        ts1.setIndicator("tab3"); ts1.setContent(R.id.tab3); tabhost.addTab(ts1);
        tabhost.setCurrentTab(0);
       
        Button btnadd = (Button)findViewById(R.id.add);
        Button btnclear = (Button)findViewById(R.id.clear);
        btnadd.setOnClickListener(this);
        btnclear.setOnClickListener(this);
       
        db = mHelper.getWritableDatabase();
        cursor = db.rawQuery("SELECT * FROM sch", null);
  startManagingCursor(cursor);
  
  scheduleCursorAdapter Adapter = null;
  Adapter = new scheduleCursorAdapter(this,cursor);
  
  ListView list = (ListView)findViewById(R.id.list);
        list.setAdapter(Adapter);
        mHelper.close();
    }
   
    public void onClick(View v) {
     EditText edname = (EditText)findViewById(R.id.edname);
     EditText edmemo = (EditText)findViewById(R.id.edmemo);
     
     switch(v.getId()) {
     case R.id.add:
      String textname = edname.getText().toString();
      String textmemo = edmemo.getText().toString();
      edname.setText("");
      edmemo.setText("");
      db = mHelper.getWritableDatabase();
      try {
          db.execSQL("INSERT INTO sch VALUES (null, '"+textname+"','"+textmemo+"');");
          cursor.requery();
          Adapter.notifyDataSetChanged();                                <----------이 부분에서 문제가 생깁니다
      } catch (SQLException e) {}
      mHelper.close();
   Toast.makeText(tabex.this,"새 항목이 추가되었습니다",Toast.LENGTH_SHORT).show();
   break;
     case R.id.clear:
      db = mHelper.getWritableDatabase();
      db.execSQL("DELETE FROM sch;");
      edname.setText("");
      edmemo.setText("");
      mHelper.close();
   Toast.makeText(tabex.this,"삭제되었습니다",Toast.LENGTH_SHORT).show();
   break;
     }
    }
}