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

안드로이드 시간표 어플 질문드립니다

0 추천

안드로이드 시작한지 별로안된 초보입니다 ..

제가 이번에 간단하게 시간표 어플을 만들게 됬는데

막히는 부분이 있어서 질문드립니다 .

데이터베이스에 데이터가 잘 추가 되고 리스트 뷰에서 데이터들의 값들이 잘 출력됩니다 .

하지만 메인 페이지(시간표에 색이나 과목명)을 넣는 자바에서 데이터를 받을수없습니다 .

 

메인 페이지 ( 노란색 글씨에서 프로그램이 죽어버리네요 ㅠㅠ)

package com.example.ysc.schedule;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;



public class schedule extends AppCompatActivity {

    public String time;
    public String day;
    public String subject;
    TimeDbHelper helper;
    SQLiteDatabase db;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_schedule );

        TextView monday1 = (TextView) findViewById( R.id.monday1 );

        db = helper.getReadableDatabase();

        Cursor c = db.rawQuery( "SELECT * From " + TimeContract.TableEntry.TABLE_NAME, null );
        c.moveToFirst();
        while (c.moveToNext()) {
            String a = c.getString( 0 );
            String b = c.getString( 1 );
            String d = c.getString( 2 );
            String e = c.getString( 3 );
            String f = c.getString( 4 );
            monday1.setText( c.getString( 0) );
        }


        c.close();

        Button button1 = (Button) findViewById( R.id.create );
        Button button2 = (Button) findViewById( R.id.moveDB );

        button1.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent( schedule.this, Create.class );

                startActivity( intent );
            }
        } );

        button2.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent( schedule.this, test.class );

                startActivity( intent );
            }
        } );


    }


}

 

 

kane9529 (1,110 포인트) 님이 2018년 12월 3일 질문

2개의 답변

0 추천
mDbOpenHelper = new TimeDbHelper(this);
mDbOpenHelper.open();
mDbOpenHelper.create();
위와 같은 코드를 사용하여 TimeDbHelper 객체를 만들고 open() 및 create() 코드를 추가해보세요.
CSEKimDoYeon (500 포인트) 님이 2018년 12월 3일 답변
답변 감사합니다 답변 주신대로 onCreate 부분에 넣어봤는데  해결이 되질않네요
mDbOpenHelper = new TimeDbHelper(this);
mDbOpenHelper.open();
mDbOpenHelper.create();

mDbOpenHelper 가안되서 TimeDbHelper로 변경해서해봤는데도 오류가 나옵니다 ..
TimeDbHelper 파일입니다 ..
public class TimeDbHelper extends SQLiteOpenHelper {

    private static TimeDbHelper sInstance;

    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "time.db";
    private static final String SQL_CREATE_ENTRIES = String.format( "CREATE TABLE %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT,%s TEXT,%s TEXT NOT NULL,%s,%s)",
            TimeContract.TableEntry.TABLE_NAME, TimeContract.TableEntry._ID, TimeContract.TableEntry.COLUM_NAME, TimeContract.TableEntry.COLUM_PLACE, TimeContract.TableEntry.COLUM_MEMO, TimeContract.TableEntry.COLUM_BUTTON, TimeContract.TableEntry.COLUM_Time1
    );


    private static final String SQL_DROP_ENTRIES = "DROP TABLE IF EXISTS " + TimeContract.TableEntry.TABLE_NAME;

    public static TimeDbHelper getsInstance(Context context) {
        if (sInstance == null) {
            sInstance = new TimeDbHelper( context );
        }
        return sInstance;
    }

    private TimeDbHelper(Context context) {
        super( context, DB_NAME, null, DB_VERSION );
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(SQL_CREATE_ENTRIES);
//CREATE TABLE Time(subject TEXT PRIMARY KEY,place TEXT,memo TEXT,button TEXT,time TEXT);"
    }



    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL( SQL_DROP_ENTRIES );
        onCreate( db );
    }
0 추천
혹시 cursor c 가 null 이 아닌지 확인해 보세요 ..

데이터가 하나도 없는 상태에 대한 예외처리가 없는듯합니다.
산적 (1,360 포인트) 님이 2018년 12월 4일 답변
확인을 해보니  db = helper.getReadableDatabase();여기서 죽네요
소스를 보니 getsInstance 를 이용한 싱글톤 방식이네요 ..
helper.getReadableDatabase(); 하기전에 먼저 getsInstance 를 하셔서 helper 를 가지고 온 다음에 해보세요 ..
...