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

리스트뷰 어댑터 db 연동 부분에서 막혔습니다.

0 추천

얼마전에 안드로이드를 배우기 시작했는데 공부하는 중에 리스트뷰에 막혀서 질문드립니다.

제가 DB의 있는 내용을 리스트뷰를 이용해 보여줄려고 하는데

이해도가 낮아서 설명을 봐도 어렵기만 하고 잘 모르겠더군요.

일단 구글링 예제소스들을 이용해서 실행해봤는데 DB를 여는 부분까진 성공했습니다.

근데 커서로 쿼리를 주고 어댑터를 이어주는 부분에서 에러를 뿜으면서 꺼지는데

며칠간 끙끙대봤지만 혼자서 도저히 해결을 못하겠습니다.

어댑터 부분이 문제인것 같긴한데 어떻게 고쳐야할지 정말 하나도 모르겠습니다.

부끄럽지만 문제되는 부분의 지적과 해결방안을 알고 싶습니다.

 

package com.example.test;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

public class select extends ActionBarActivity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        Context c=getApplicationContext();
        DBHelper myDbHelper = new DBHelper(this);
        
        ListView Slist = (ListView) findViewById( R.id.list );
        
        
        SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase("/data/data/com.example.test/databases/DB.sqlite", null, SQLiteDatabase.OPEN_READONLY);
        Cursor cursor = myDataBase.rawQuery("SELECT * FROM subject", null);
        CAdapter myAdapter = new CAdapter(this, cursor);
        Slist.setAdapter(myAdapter); //이 코드를 실행시 에러
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select);
   }

    public class CAdapter extends CursorAdapter
    {
        public CAdapter(Context cntx, Cursor cursor)
        {
            super(cntx, cursor);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            ((TextView) view).setText(cursor.getString(0) + " / " + cursor.getString(1));
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater inflater = LayoutInflater.from(context);
            View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
            return view.findViewById(android.R.id.text1);
        }
    }
}
    
   --------------------------------------------------------------------------------------------------------------------------------------------------------

12-18 11:49:07.156: E/AndroidRuntime(24104): FATAL EXCEPTION: main
12-18 11:49:07.156: E/AndroidRuntime(24104): Process: com.example.test, PID: 24104
12-18 11:49:07.156: E/AndroidRuntime(24104): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.select}: java.lang.NullPointerException
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2262)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.ActivityThread.access$800(ActivityThread.java:139)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.os.Looper.loop(Looper.java:136)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.ActivityThread.main(ActivityThread.java:5129)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at java.lang.reflect.Method.invokeNative(Native Method)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at java.lang.reflect.Method.invoke(Method.java:515)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at dalvik.system.NativeStart.main(Native Method)
12-18 11:49:07.156: E/AndroidRuntime(24104): Caused by: java.lang.NullPointerException
12-18 11:49:07.156: E/AndroidRuntime(24104):     at com.example.test.select.onCreate(select.java:28)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.Activity.performCreate(Activity.java:5275)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-18 11:49:07.156: E/AndroidRuntime(24104):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)

-------------------------------------------------------------------------------------------------------------------------------------------------------------

질문폭발 (160 포인트) 님이 2014년 12월 18일 질문

1개의 답변

+1 추천
 
채택된 답변

super.onCreate(savedInstanceState);
        setContentView(R.layout.select);

이 두줄이 앞에 있어야 합니다

 

onCreate(){

 super.onCreate(savedInstanceState);
        setContentView(R.layout.select);

 Context c=getApplicationContext();

        DBHelper myDbHelper = new DBHelper(this);
        
        ListView Slist = (ListView) findViewById( R.id.list );
        
        
        SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase("/data/data/com.example.test/databases/DB.sqlite", null, SQLiteDatabase.OPEN_READONLY);
        Cursor cursor = myDataBase.rawQuery("SELECT * FROM subject", null);
        CAdapter myAdapter = new CAdapter(this, cursor);
        Slist.setAdapter(myAdapter); //이 코드를 실행시 에러
        
       }

중견수 (5,600 포인트) 님이 2014년 12월 18일 답변
질문폭발님이 2014년 12월 18일 채택됨
오.. 해결됐습니다
정말 감사합니다.
...