마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰 삭제 null 오류 좀 부탁드려요

0 추천
public class MainActivity extends Activity {
 private ArrayList<String> item;
 private ArrayAdapter<String> adapter;
 ListView list;
 
@Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);}
                    
 public void mOnClick(View v) {
  SQLiteDatabase db;
  String sql;
  switch(v.getId()) {
   case R.id.gps :
    
    Log.d("location", "button pressed");
                Calendar calendar = Calendar.getInstance();
    SimpleDateFormat formater = new SimpleDateFormat("yy.MM.dd HH:mm:ss");
    Date current = new Date();
      
    String mtime = formater.format(current);   
    System.out.println(formater.format(calendar.getTime()));
    getTime = (TextView)findViewById(R.id.getTime);
    getTime.setText(mtime);
    
    break;
    
   case R.id.save :
    
    String timing2 = getTime.getText().toString();
    String juso2 = juso.getText().toString();
      
    dbHelper = new DBHelper(this, dbName, null, dbVersion);
    db = dbHelper.getWritableDatabase();
    sql = String.format("INSERT INTO ksj(timing, juso) VALUES('%s', '%s');", timing2, juso2);
    Log.d("tag", sql);
    db.execSQL(sql);
    Toast.makeText(this, "저장되었습니다.", Toast.LENGTH_SHORT).show();
    
    break;
    
   case R.id.data :
   
    setContentView(R.layout.activity2nd);
    ArrayList<String> item = new ArrayList<String>();
    adapter = new ArrayAdapter<String>(this,
           android.R.layout.simple_list_item_single_choice, item);
    ListView list = (ListView)findViewById(R.id.list);
    list.setAdapter(adapter);
    list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    
    //adapter.notifyDataSetChanged();
       
    Log.d("DATA", "Search data");
    db = dbHelper.getReadableDatabase();
    sql = "SELECT*FROM ksj;";
    Cursor cursor = db.rawQuery(sql, null);
       
        if(cursor.getCount() > 0) {     
           while(cursor.moveToNext()){
                 String time1 = cursor.getString(1);
                 Log.d("tag", "cursor.getString1 = "+time1);
                 String juso1 = cursor.getString(2);
                 Log.d("tag", "cursor.getString2 =" +juso1);
                
                 item.add(time1+"\n"+juso1);
                 adapter.notifyDataSetChanged();
                
                 list.setOnItemClickListener(mItemClickListener);
              findViewById(R.id.delete).setOnClickListener(mClickListener);
                }
           cursor.close();
        }
        dbHelper.close();
  }
 }
        
 ListView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                             }
    };
   
    Button.OnClickListener mClickListener = new View.OnClickListener() {
               public void onClick(View v) {
           switch(v.getId()) {
           case R.id.delete:
           ListView list = (ListView)findViewById(R.id.list);
              int id = list.getCheckedItemPosition();
              if(id != ListView.INVALID_POSITION) {
                   item.remove(id);
                   list.clearChoices();
                   adapter.notifyDataSetChanged();
              }
              break;
           }
        }
    };
}

delete 버튼을 눌렀을때 오류캣을 뿜습니다. 위에 삽입하면서 무슨 java code 라면서 이상한게 들어갓는데 무시요

소스기능은 버튼을 눌러 현재날짜와 시간을 얻고 이걸 db에 저장한후 db값을 불러온 LISTVIEW에서 리스트 한개를 삭제하려는 의도입니다,.

오류캣270번줄 (위소스 91번 줄( item.remove(id); ) 에서 오류 납니다.

 

 

ArrayList<String> item;

private ArrayAdapter<String> adapter;

ListView list;
위3개는 전역변수로 선언해놨습니다.
 
클릭리스너 위치를 잘못 잡은것 같기두 하구요.
 

06-12 11:19:45.352: E/AndroidRuntime(790): FATAL EXCEPTION: main
06-12 11:19:45.352: E/AndroidRuntime(790): java.lang.NullPointerException
06-12 11:19:45.352: E/AndroidRuntime(790):  at com.example.gps0611a.MainActivity$2.onClick(MainActivity.java:270)

앤드류이드 (6,190 포인트) 님이 2013년 6월 12일 질문
앤드류이드님이 2013년 6월 12일 수정
구글에서 "변수 scope" 로 검색해보세요~

1개의 답변

0 추천
전역으로 선언한 item이 클릭할때까지 null이네요 보여주신 코드에는 전역item인스턴스 생성해주는 곳이 없어요 중간에 local로 item new하신건 전역item에 값 안들어갑니다
ignitepaper (1,720 포인트) 님이 2013년 6월 13일 답변
...