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

안드로이드 스튜디오 db연동 목록을 불러오면 프로그램종료

0 추천

안드로이드 스튜디오와 녹스를 사용하고 있습니다.

주소록보기 버튼을 클릭하면 앱이 꺼지는 오류가 있는데 이유를 도저히 모르겠습니다

MainActivity.java
        selectaddress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                addressview.setVisibility(View.VISIBLE);//리스트뷰 보여주기

                if(dbHelper ==null){//dbhelper가 널이면 초기화
                    dbHelper = new DBHelper(MainActivity.this, dn, null, 1);
                }
                List people = dbHelper.getAllPersonData();//데이터 가져오기

                addressview.setAdapter(new Adapter(people, MainActivity.this));//데이터를 리스트 뷰에 뿌리기
            }
        });
    }
}
DBHelper.java
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {

    private Context context;

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // String 보다 StringBuffer가 Query 만들기 편하다고 한다.
        StringBuffer sb = new StringBuffer();
        sb.append(" CREATE TABLE TEST_TABLE ( ");
        sb.append(" _ID INTEGER PRIMARY KEY AUTOINCREMENT, ");
        sb.append("  NAME TEXT, CALL TEXT, MEMBER TEXT, ADDRESS TEXT, BIRTHDAY TEXT, NICKNAME TEXT)");
        // SQLite Database로 쿼리 실행
        db.execSQL(sb.toString());//추가,수정 또는 삭제를 실행시키라는 의미
        Toast.makeText(context, "Table 생성완료", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Toast.makeText(context, "버전이 올라갔습니다.", Toast.LENGTH_SHORT).show();
    }

    public void testDB() {
        SQLiteDatabase db = getReadableDatabase();//읽기전용으로 데이터 베이스이용
    }

    public void addPerson(Person person) {
        SQLiteDatabase db = getWritableDatabase();//데이터 베이스를 읽고 쓰기모드로 불러온다.
        StringBuffer sb = new StringBuffer();
        sb.append("INSERT INTO TEST_TABLE ( NAME, CALL, MEMBER, ADDRESS, BIRTHDAY, NICKNAME)");
        sb.append("VALUES (?, ?, ?, ?, ?, ?)"); //_id는 자동으로 증가해서 넣지 않음

        db.execSQL(sb.toString(), new Object[]{
                person.getName(), person.getCall(), person.getMember(), person.getAddress(), person.getBirthday(),
                person.getNickname()});
        Toast.makeText(context, "저장완료", Toast.LENGTH_SHORT).show();

    }

    public List getAllPersonData() {
        StringBuffer sb = new StringBuffer();
        sb.append("SELECT _ID, NAME, CALL, MEMBER, ADDRESS, BIRTHDAY, NICKNAME FROM TEST_TABLE");
        SQLiteDatabase db = getReadableDatabase();//데이터 베이스를 읽기모드로 불러온다.

        Cursor cursor = db.rawQuery(db.toString(), null);
        List people = new ArrayList();
        Person person = null;

        while (cursor.moveToNext()) {//moveToNext가 끝날때까지
            person = new Person();
            person.set_id(cursor.getInt(0));
            person.setName(cursor.getString(1));
            person.setCall(cursor.getString(2));
            person.setMember(cursor.getString(3));
            person.setAddress(cursor.getString(4));
            person.setBirthday(cursor.getString(5));
            person.setNickname(cursor.getString(6));

            people.add(person);
        }
        return people;
    }
}
코딩초보에요 (120 포인트) 님이 2018년 8월 17일 질문
로그 덤프가 있으면 올려 주세요

1개의 답변

0 추천
오류목록을 캡쳐해서 올려주세요
열코 (890 포인트) 님이 2018년 8월 21일 답변
...