이것저것 검색을 해봤습니다.
로컬 db 자체가 용량이 얼마 안되서 (400kb) 인터넷 연결 다운보다는 로컬db다운이 괜찮겠구나 생각되어 그냥 assets에 db를 넣었습니다.
assets/databases/test.db (일단 테스트로 합니다.)
그리고 그 외의 자료는 검색했습니다.
public class Test extends Activity {
private ListView m_listIndex;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voca);
initialize(this);
m_listIndex = (ListView) this.findViewById(R.id.vocalist);
m_listIndex.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
}
});
setAdaptor();
}
public static final String ROOT_DIR = "/data/data/android.test/";
private static final String DATABASE_NAME = "test.db";
public static final String TABLE_NAME = "lecture";
private static final String COLUMN_KEY_ID = "_id";
private static final String COLUMN_NAME = "name";
public static void initialize(Context ctx) {
// check
File folder = new File(ROOT_DIR + "databases");
folder.mkdirs();
File outfile = new File(ROOT_DIR + "databases/" + DATABASE_NAME);
if (outfile.length() <= 0) {
AssetManager assetManager = ctx.getResources().getAssets();
try {
InputStream is = assetManager.open(DATABASE_NAME, AssetManager.ACCESS_BUFFER);
long filesize = is.available();
byte [] tempdata = new byte[(int)filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
FileOutputStream fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private SQLiteDatabase mDatabase;
private void setAdaptor() {
if (mDatabase == null) {
mDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
}
Cursor cursor = null;
final CursorAdapter adaptor;
String[] columns = new String[] {COLUMN_KEY_ID, COLUMN_NAME};
cursor = mDatabase.query(TABLE_NAME, columns, null, null, null, null, null);
adaptor = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[] {COLUMN_NAME},
new int[] {android.R.id.text1}
);
m_listIndex.setAdapter(adaptor);
}
}정보를 찾아보니 이런식으로 구현하면 된다고 나와있습니다.
그런데 이걸 제가 작성중인 프로그램의 하나의 액티비티에 넣어주었고 Minifest라던가 layout은 전부 추가해주었습니다.
그런데 오류가 뜹니다.
오류 내용은
ERROR/AndroidRuntime(27499): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.test/android.test.Test}: android.database.sqlite.SQLiteException: no such table: lecture: , while compiling: SELECT _id, name FROM lecture
ERROR/AndroidRuntime(27499): Caused by: android.database.sqlite.SQLiteException: no such table: lecture: , while compiling: SELECT _id, name FROM lecture
이정도입니다. 테이블을 찾을 수 없다는 내용인데 왜 assets의 db를 가지고오지 못하는지 모르겠습니다.
(그냥 상황에 따라 로컬db를 생성해서 즐겨찾기 추가해주고는 전부 구현했는데...
assets에서 가져오는 것은 계속 오류가 나네요.
인터넷 다운으로 해야하는건지 -_-;;;;;;;)




파일이 정상적으로 생성되었나요?