2012-06-26 5 views
0

안드로이드 응용 프로그램에서 작업하고 있습니다. 내 sqlite 데이터베이스를 안드로이드 프로젝트로 가져옵니다. 데이터베이스가 에뮬레이터에서 제대로 작동하지만 응용 프로그램을 테스트 할 때 내 장치에서 작동하지 않고 메시지를 출력합니다. 불행히도 appname이 중지되었습니다.내 에뮬레이터에서 작동하는 SQLite 데이터베이스가 내 장치에서 작동하지 않습니다.

try {   
    String destPath = "/data/data/" + getPackageName() + "/databases/MyDB"; 
    File f = new File(destPath);    
    if (!f.exists()) {   
     CopyDB(getBaseContext().getAssets().open("mydb"), 
       new FileOutputStream(destPath)); 
    } 
} catch (FileNotFoundException e) {   
    e.printStackTrace(); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

COPYDB 기능 :

public void CopyDB(InputStream inputStream, OutputStream outputStream) 
    throws IOException { 
    //---copy 1K bytes at a time--- 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = inputStream.read(buffer)) > 0) { 
     outputStream.write(buffer, 0, length); 
    } 
    inputStream.close(); 
    outputStream.close(); 
} 

DBAdapter 등급 :

나는 다음을 복사하려면이 코드를 사용하여 내 프로젝트에 자산 폴더에 내 데이터베이스를 넣어

public class DBAdapter { 
public static final String KEY_ROWID = "_id"; 
public static final String KEY_NAME = "username"; 
public static final String KEY_PASSWORD = "password"; 


private static final String DATABASE_NAME = "MyDB"; 
private static final String DATABASE_TABLE = "users"; 
private static final int DATABASE_VERSION = 4; 



private final Context context;  

private DatabaseHelper DBHelper; 
private SQLiteDatabase db; 

public DBAdapter(Context ctx) 
{ 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper 
{ 
    DatabaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 

    } 
}  

//---opens the database--- 
public DBAdapter open() throws SQLException 
{ 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 

//---closes the database---  
public void close() 
{ 
    DBHelper.close(); 
} 


//---retrieves all the users--- 
public Cursor getAllusers() 
{ 
    return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, 
      KEY_PASSWORD}, null, null, null, null, null); 
} 

//---retrieves a particular user--- 
public User getuser(String username) throws SQLException 
{ 

    Cursor mCursor = 
      db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
      KEY_NAME, KEY_PASSWORD}, KEY_NAME + "=" + "'"+username+ "'", null, 
      null, null, null, null); 
    if(mCursor.moveToFirst()) 
    { 
     mCursor.moveToFirst(); 
     User u=new User(Integer.valueOf(mCursor.getString(0)),mCursor.getString(1),mCursor.getString(2)); 
     return u; 
    }else 
     return null; 

} 

}

미리 감사드립니다.

+0

포스트 오류를 ​​보여주는 로그 캣을. – Barak

+0

기기에서 앱을 실행하는 동안 logcat을 확인하는 방법은 무엇입니까? –

+0

내 모바일처럼 안드로이드 (안드로이드 4)의 새로운 버전으로 에뮬레이터에서 앱을 실행 해 보았습니다. 이제 새로운 에뮬레이터에서 작동하지 않습니다! –

답변

0

SQLite 데이터베이스를 가져 오는 것은 기본적으로 나쁜 생각입니다. raw xml에서 데이터베이스를 만드는 것이 더 좋습니다. 이 tutorial가 도움이됩니다. 질문에 대해서는 응용 프로그램의 데이터를 지우거나 응용 프로그램을 제거하여 문제를 해결할 수 있습니다.

+0

응용 프로그램을 제거한 다음 다시 설치했지만 아무 것도 변경되지 않았습니다 ... 내 응용 프로그램 내에 데이터베이스가 있어야합니다. –

+0

내 모바일과 마찬가지로 안드로이드 (안드로이드 4)의 최신 버전으로 에뮬레이터에서 응용 프로그램을 실행 해 보았습니다. 이제 새로운 에뮬레이터에서 작동하지 않습니다! –

+0

@ MustafaAbdel-Khalik 오케이, 스크린 샷 대신 전체 logcat (각 logcat 라인을 선택하고 crtl + C를 사용하여 복사하십시오)를 게시하십시오. –

0

LogCat을 보지 않고 오류의 원인을 추측하기가 어렵습니다.

동일한 기능을 수행하는 앱을 살펴보면 복사 기능에서 볼 수있는 유일한 차이점은 작업 순서와 추가 방법에 관한 것입니다.

는 말에 당신의 COPYDB 방법이 시도 :

outputStream.flush(); 
outputStream.close(); 
inputStream.close(); 
+0

시도했지만 여전히 작동하지 않습니다. –

+0

LogCat을 게시하면 어떤 오류가보고되는지 알 수 있습니다. – Barak

+0

내 장치의 동일한 버전으로 최신 에뮬레이터 (안드로이드 4)에서 응용 프로그램을 사용해 보았습니다. 이제 에뮬레이터와 장치 logcat 모두에서 작동하지 않습니다. http://imageshack.us/photo/my-images/ 9/logcatt.png/ –

관련 문제