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

Custom ListView와 CursorAdapter를 이용한 Item버튼클릭시 db수정에 대해 질문 드립니다

0 추천

안녕하세요 어플을 처음으로 만들어보고 있어서 아직 많이 부족한 학생입니다.

CusorAdapter를 이용해 DB를 Custom listView(Textview, TextView, Button으로 구성되어 있습니다.) 에 띄우고 나서 Item들을 클릭할때 수행되는 기능에 대해 구현 중입니다.

TextView는 OnItemClickListner을 이용해 클릭하도록 하였고 Button은 클릭시 DB의 값 일부를 업데이트 시키도록 구성하고 싶습니다. 그런데 OnItemClickListner로 잘 안되어 Adapter내에서 클릭이 가능하도록 하였지만 DBHelper가 불러지지 않아 db수정이 안됩니다. 구글링으로 여러방법 찾아보았지만 계속 오류가 떠 질문 드립니다.

DBHelper와 Adapter class는 따로 구현하였습니다.

 어떻게 하면 listView의 버튼 클릭시 db값이 수정되도록 할 수 있는지 알려주시면 감사하겠습니다.

public class DBAdapter extends CursorAdapter {

    //DBHelper dbHelper;
    //SQLiteDatabase db;
    //String sql;

    public DBAdapter(Context context, Cursor c){
        super (context ,c );
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(R.layout.list_item, parent, false);
        return v;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        final TextView priority = (TextView)view.findViewById(R.id.textPriority);
        final TextView name = (TextView)view.findViewById(R.id.textName);
        final Button button = (Button) view.findViewById(R.id.button);

        priority.setText(cursor.getString(cursor.getColumnIndex("priority")));
        name.setText(cursor.getString(cursor.getColumnIndex("name")));

       int position = cursor.getPosition();
       button.setTag(position);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
//버튼 클릭은 잘 되는데 db수정이 잘 안되고 있습니다ㅠㅠ
                name.setTextColor(Color.rgb(246,187,67));
               // db = dbHelper.getWritableDatabase();  <- 이부분에서 오류가 납니다
               // sql = String.format("UPDATE t3 SET finish = 1;");
               // db.execSQL(sql);
            }
        });

    }
}

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.database.sqlite.SQLiteOpenHelper.getWritableDatabase()' on a null object reference
        at com.example.myyou.todays.DBAdapter$1.onClick(DBAdapter.java:50)

 list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                //int bntPosition = (Integer) view.getTag();
               // Log.d("버튼","버튼= "+bntPosition);
                cursor.moveToPosition(position);
                String str = cursor.getString(cursor.getColumnIndex("name"));
                String str1 = cursor.getString(cursor.getColumnIndex("memo"));
                Log.d("클릭",str);
               

            }
        });

Main에서 각 Custom listView의 Item에 대한 클릭은 다음과 같이 하였습니다.

 

만두콩 (230 포인트) 님이 2019년 1월 24일 질문

1개의 답변

0 추천
 
채택된 답변
listview 는 요즘 잘 사용되지 않아서 가능하면 recycler view 를 찾아보시구요

dbhelper 를 초기화 (인스턴스) 하지 않고 그냥 사용해서 null point exception 이 발생된것 입니다.

무엇을 참고하면서 코딩을 하고 있는지는 모르겠지만 책이나 인터넷을 뒤지만 많이 나온는 부분이라 +_ + 흠..

암튼 공부차원이라면 listview 를 알아도 괜찮지만 가능하면 recycler view 에 orm 형태의 db 를 찾아서 적용해보세요

http://androidtuts4u.blogspot.com/2013/02/android-list-view-using-custom-adapter.html
aucd29 (218,390 포인트) 님이 2019년 1월 24일 답변
만두콩님이 2019년 1월 24일 채택됨
완전 간단한거였네요..ㅠㅠㅠㅠㅠ알려주셔서 감사합니다 꾸벅
...