공지사항은 읽었습니다.
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();
}
});
}
}
});
}
}
코드 하이라이터를 이렇게 쓰는게 아닌 것 같은데;; 하이라이트가 안 되네요.... 소스를 붙여넣었는데 이렇게 하는것이 아닌지...ㅠㅠ