이것저것 검색을 해봤습니다.


로컬 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에서 가져오는 것은 계속 오류가 나네요.


인터넷 다운으로 해야하는건지 -_-;;;;;;;)