공지사항은 읽었습니다.

 

GridView로 간단한 시간표를 만들었습니다. 처음에는 db를 사용하지 않고 모양을 내기만 해서 만들었는데

db를 사용하여 GridView 의 아이템 클릭시에 테이블에 값이 저장되고 업데이트 되는 것은 구현하였습니다.

그러나 저장된 db를 GridView형태를 유지하며 어플을 다시 실행시에 저장했던 테이블 값들을 그대로 불러오게 하려면 어떻게 해야 할지 감이 안 잡힙니다....

즉 테이블에 값이 저장되기는 하나 그것이 어플을 실행할 때 저장된 값-과목명 을 그대로 불러오고자 하는 의도입니다.

sqlite관련 여러 설명들을 읽어보아도 모르겠어서 봐주시면 감사하겠습니다.

 

 package time.khuapps;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;

class TimeDBHelper extends SQLiteOpenHelper {

 public TimeDBHelper(Context context) {
  super(context, "timetable.db", null, 1);  
 }
 
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("Create table timetable(datapos int, subject text, professor text, memo text);");
 }

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.execSQL("drop table if exists timetable");
  onCreate(db);
 }
}

public class TimeTableActivity extends Activity {

 SQLiteOpenHelper mHelper;
 
 // 시간표 모양 설정
 String mon01= "   ", tue01= "   ", wed01= "   ", thu01= "   ", fri01= "   ";
 String mon02= "   ", tue02= "   ", wed02= "   ", thu02= "    ", fri02= "   ";
 String mon03= "   ", tue03= "   ", wed03= "   ", thu03= "   ", fri03= "   ";
 String mon04= "   ", tue04= "   ", wed04= "   ", thu04= "   ", fri04= "   ";
 String mon05= "   ", tue05= "   ", wed05= "   ", thu05= "   ", fri05= "   ";
 String mon06= "   ", tue06= "   ", wed06= "   ", thu06= "   ", fri06= "   ";
 
 // 시간표 저장 배열
 String days[] = {" ","월","화","수","목","금",
   "09:00 -10:15", mon01, tue01, wed01, thu01, fri01,
   "10:30 -11:45", mon02, tue02, wed02, thu02, fri02,
   "12:00 -13:15", mon03, tue03, wed03, thu03, fri03,
   "13:30 -14:45", mon04, tue04, wed04, thu04, fri04,
   "15:00 -16:15", mon05, tue05, wed05, thu05, fri05,
   "16:30 -17:45", mon06, thu06, wed06, thu06, fri06};
 
 ArrayAdapter<String> aa_days; // 시간표 어댑터
 
 int pos;     // 시간표의 좌표
 
 EditText editSub;   // 편집 : 과목명
 EditText editPro;   // 편집 : 교수명
 EditText editMemo;   // 편집 : 강의 메모
 
 GridView g_days;   // 시간표 view
 
 String strSub = " ";  // 스트링 : 과목명 !!!스트링 초기화 안할시 에러!!!
 String strPro = " ";  // 스트링 : 교수명
 String strMemo = " ";  // 스트링 : 강의메모
 
 String tempstrSub = " ";
 String tempstrPro = " ";
 String tempstrMemo = " ";
 
 Button btnSub;    // 버튼 : 과목명
// Button btnPro;    // 버튼 : 교수명
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        mHelper = new TimeDBHelper(this);
       
        aa_days = new ArrayAdapter<String>(this, R.layout.item01, days);
       
        //에디트와 버튼, 시간표 등의 아이디 등록 및 초기상태 설정
        editSub = (EditText)findViewById(R.id.editSub);
        editPro = (EditText)findViewById(R.id.editPro);
        editMemo = (EditText)findViewById(R.id.editMemo);
       
        g_days = (GridView)findViewById(R.id.gridview);
       
        btnSub = (Button)findViewById(R.id.btnSub);
        
        // 초기 에디트와 버튼 안보임
        editSub.setVisibility(g_days.GONE);
        editPro.setVisibility(g_days.GONE);
        editMemo.setVisibility(g_days.GONE);
       
        btnSub.setVisibility(g_days.GONE);

        g_days.setAdapter(aa_days);
      
        g_days.setOnItemClickListener(new OnItemClickListener() {
         ContentValues row; // 새 입력정보를 가진 객체 생성
         Cursor cursor;   // add cursor;
         SQLiteDatabase db;
         
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          
          
          pos = position;
          
          
          
          if(days[position] == "   ")
          {
           db = mHelper.getWritableDatabase();
           row = new ContentValues();
           g_days.setVisibility(view.GONE);  // 입력모드:시간표 안보임
           
           editSub.setVisibility(g_days.VISIBLE); // 과목명 입력 보이기
           editPro.setVisibility(g_days.VISIBLE); // 교수명 입력 보이기
           editMemo.setVisibility(g_days.VISIBLE); // 강의메모 입력 보이기
           btnSub.setVisibility(g_days.VISIBLE); // 과목명 입력완료 버튼 보이기
              
           btnSub.setOnClickListener(new Button.OnClickListener() { // 과목명 입력 완료버튼 클릭시
            public void onClick(View v) {
             strSub = editSub.getText().toString(); // 과목명 스트링에 입력된 과목명 저장
             strPro = editPro.getText().toString(); // 교수명 스트링에 입력된 교수명 저장
             strMemo = editMemo.getText().toString();// 강의메모 스트링에 입력된 강의메모 저장
             
             row.put("datapos", pos);    // db에 포지션 삽입
             row.put("subject", strSub);    // db에 과목명 삽입             
             row.put("professor", strPro);   // db에 교수명 삽입 
             row.put("memo", strMemo);    // db에 강의메모 삽입
             
             db.insert("timetable", null, row);
             //db.update("timetable", row, "_id=" + pos, null);
             
             
             editPro.setVisibility(g_days.GONE);  // 과목명 편집창 사라짐
             editSub.setVisibility(g_days.GONE);  // 교수명 편집창 사라짐
             editMemo.setVisibility(g_days.GONE); // 강의메모 편집창 사라짐
             
             btnSub.setVisibility(g_days.GONE);  // 과목명 입력완료버튼 사라짐
             
             // !!!입력 완료 시 키보드 사라지게!!!
             InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
             keyboard.hideSoftInputFromWindow(editPro.getWindowToken(), 0);
             
             g_days.setVisibility(g_days.VISIBLE);  // 시간표 다시 보이게
             
             days[pos] = strSub;       // 시간표에 입력받은 과목명 표시
             aa_days.notifyDataSetChanged();    // 시간표 갱신
             
             mHelper.close();
            }
           }); 
           
          }
          
          else
          {
           db = mHelper.getWritableDatabase();
           row = new ContentValues();
           
           cursor = db.rawQuery("SELECT * FROM timetable", null);
              startManagingCursor(cursor);
              
              cursor.moveToFirst();
              
           while(pos != cursor.getInt(0))
              {
               cursor.moveToNext();
              }
           
           // 현재 셀의 정보 출력
           tempstrSub = cursor.getString(1);   // 해당 포지션의 과목명 저장
              tempstrPro = cursor.getString(2);   // 해당 포지션의 교수명 저장
              tempstrMemo = cursor.getString(3);   // 해당 포지션의 강의메모 저장
           
              g_days.setVisibility(view.GONE);  // 입력모드:시간표 안보임
           
           editSub.setVisibility(g_days.VISIBLE); // 과목명 입력 보이기
           editPro.setVisibility(g_days.VISIBLE); // 교수명 입력 보이기
           editMemo.setVisibility(g_days.VISIBLE); // 강의메모 입력 보이기
           btnSub.setVisibility(g_days.VISIBLE); // 과목명 입력완료 버튼 보이기
              
           btnSub.setOnClickListener(new Button.OnClickListener() { // 과목명 입력 완료버튼 클릭시
            public void onClick(View v) {
             strSub = editSub.getText().toString(); // 과목명 스트링에 입력된 과목명 저장
             strPro = editPro.getText().toString(); // 교수명 스트링에 입력된 교수명 저장
             strMemo = editMemo.getText().toString();// 강의메모 스트링에 입력된 강의메모 저장
             
             row.put("datapos", pos);    // db에 포지션 삽입
             row.put("subject", strSub);    // db에 과목명 삽입             
             row.put("professor", strPro);   // db에 교수명 삽입 
             row.put("memo", strMemo);    // db에 강의메모 삽입
             
             //db.update("timetable", row, "datapos = pos", null);
             //db.update("timetable", row, cursor.getInt(0) == pos, null);
             db.update("timetable", row, "datapos="+pos, null);
             
             //db = mHelper.getWritableDatabase();
             //cursor = db.rawQuery("SELECT * FROM timetable", null);
             
             editPro.setVisibility(g_days.GONE);  // 과목명 편집창 사라짐
             editSub.setVisibility(g_days.GONE);  // 교수명 편집창 사라짐
             editMemo.setVisibility(g_days.GONE); // 강의메모 편집창 사라짐
             
             btnSub.setVisibility(g_days.GONE);  // 과목명 입력완료버튼 사라짐
             
             // !!!입력 완료 시 키보드 사라지게!!!
             InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
             keyboard.hideSoftInputFromWindow(editPro.getWindowToken(), 0);
             
             g_days.setVisibility(g_days.VISIBLE);  // 시간표 다시 보이게
             
             days[pos] = strSub;       // 시간표에 입력받은 과목명 표시
             aa_days.notifyDataSetChanged();    // 시간표 갱신
             
             cursor.close();
             mHelper.close();
            }
           });
          }
         }
  });
    }
}


 코드 하이라이터를 이렇게 쓰는게 아닌 것 같은데;; 하이라이트가 안 되네요.... 소스를 붙여넣었는데 이렇게 하는것이 아닌지...ㅠㅠ