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

DB 생성자와 cursor 질문입니다.

0 추천
mCursor = dbhelper.getMatchPatt(password);
//password가 DB의 patt column 중에 있다면 해당 row의 num을 받아서 전화걸기
if (mCursor.getCount() > 0){
    pnum = mCursor.getString(2);
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+pnum));
    startActivity(intent);

cursor로 입력받은 문자열이 있는 row를 찾아 그 row의 다른 data를 String으로 받으려 하는데 마지막줄에서 오류가 뜹니다.

 

 

 

또 이것저것 예제를 찾아가면서 DB 생성자 관련해서 짜봤지만

package com.example.ksw.lockscreenview;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Matrix;
import android.os.Bundle;
import android.database.SQLException;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.logging.Handler;

import android.content.SharedPreferences;

import static com.example.ksw.lockscreenview.R.id.tnum;

public class QDialList extends Activity
{
    private static final String TAG = "QDataBase";
    private DBHelper dbHelper;
    private Cursor mCursor;
    private InfoClass mInfoClass;
    private ArrayList<InfoClass> mInfoArr;
    private CustomAdapter mAdapter;

    SharedPreferences prefs;

    //private static final String[] Temp1 = {"a","b","c"};

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.qdial_list);
        dbHelper = new DBHelper(this, "Quick.db", null, 1);
        prefs = getSharedPreferences("Pref2", MODE_PRIVATE);
        dbHelper.open();

여기서 계속 dbHelper.open();에서 null pointer exception에서 막힙니다.

 

해당 구문은 아래와 같습니다. 아래의 DBHelper open() 입니다.

예제들과 비교해서 딱히 차이가 있어보이지는 않는데...

public class DBHelper extends SQLiteOpenHelper
{
    private static final String DATABASE_NAME = "Quick.db";
    private static final int DATABASE_VERSION = 1;
    private SQLiteDatabase db;
    private DBHelper dbhelper;
    private Context mCtx;

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
    {
        super(context, name, factory, version);
    }
//Db를 여는 메소드
public DBHelper open()
{
    dbhelper = new DBHelper(mCtx, DATABASE_NAME, null, DATABASE_VERSION);
    db = dbhelper.getWritableDatabase();
    return this;
}
아스트랄로프 (250 포인트) 님이 2016년 11월 14일 질문
아스트랄로프님이 2016년 11월 14일 수정

1개의 답변

0 추천
혹시 쿼리 하시고 나서 리턴된 cursor를 move 하셨나요?

moveToFirst 또는 moveToNext를 하고 나서 사용하셔야 합니다.
Development Guy (70,570 포인트) 님이 2016년 11월 15일 답변
...