2014-01-15 3 views
0

Hy Guys!DatabaseManager에는 기본 생성자가 없습니다.

내 문제는 안드로이드가 나에게 기본 생성자 클래스가 없다는 오류를 표시하고 있다는 것입니다. Error는 AndroidManifest에서 발생합니다.

package at.atn.android; 

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.content.Context; 
import android.database.sqlite.SQLiteException; 
import android.database.SQLException; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.FileOutputStream; 

public class DatabaseHelper extends SQLiteOpenHelper { 
//The Android's default system path of your application database. 
private static String DB_PATH = "/data/data/at.atn.android/databases/"; 

public static String DB_NAME = "db.sqlite3"; 

private SQLiteDatabase myDataBase; 

private final Context myContext; 


@Override 
public void onCreate(SQLiteDatabase db) { 
} 

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

} 

/** 
* Constructor 
* Takes and keeps a reference of the passed context in order to access to the application assets and resources. 
* 
* @param context 
*/ 
public DatabaseHelper(Context context) { 

    super(context, DB_NAME, null, 1); 
    this.myContext = context; 
} 

/** 
* Creates a empty database on the system and rewrites it with your own database. 
*/ 
public void createDataBase() throws IOException { 

    boolean dbExist = checkDataBase(); 

    if (dbExist) { 
     //do nothing - database already exist 
    } else { 

     //By calling this method and empty database will be created into the default system path 
     //of your application so we are gonna be able to overwrite that database with our database. 
     this.getReadableDatabase(); 

     try { 

      copyDataBase(); 

     } catch (IOException e) { 

      throw new Error("Error copying database"); 

     } 
    } 
} 

/** 
* Check if the database already exist to avoid re-copying the file each time you open the application. 
* 
* @return true if it exists, false if it doesn't 
*/ 
private boolean checkDataBase() { 

    SQLiteDatabase checkDB = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

    } catch (SQLiteException e) { 

     //database does't exist yet. 

    } 

    if (checkDB != null) { 

     checkDB.close(); 

    } 

    return checkDB != null ? true : false; 
} 

/** 
* Copies your database from your local assets-folder to the just created empty database in the 
* system folder, from where it can be accessed and handled. 
* This is done by transfering bytestream. 
*/ 
private void copyDataBase() throws IOException { 

    //Open your local db as the input stream 
    InputStream myInput = myContext.getAssets().open(DB_NAME); 

    // Path to the just created empty db 
    String outFileName = DB_PATH + DB_NAME; 

    //Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    //transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer)) > 0) { 
     myOutput.write(buffer, 0, length); 
    } 

    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

} 

public void openDataBase() throws SQLException { 

    //Open the database 
    String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

} 

@Override 
public synchronized void close() { 

    if (myDataBase != null) 
     myDataBase.close(); 

    super.close(); 

} 

// Add your public helper methods to access and get content from the database. 
// You could return cursors by doing "return myDataBase.query(....)" so it'd be easy 
// to you to create adapters for your views. 

}

안드로이드 매니페스트 : 저를 도와 주셔서

<application 
    android:allowBackup="true" 
    android:icon="@drawable/bus" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" > 
    <activity 
     android:name="at.atn.android.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="at.atn.android.PlanActivity"></activity> 
    <activity android:name="at.atn.android.InfoActivity"></activity> 
    <activity android:name="at.atn.android.PlanAusgabeSubActivity"></activity> 
    <activity android:name="at.atn.android.SetzeZeitActivity"></activity> 
    <activity android:name="at.atn.android.ListHaltestelleActivity"/> 
    <activity android:name="at.atn.android.AktualisiereDB"></activity> 
    <activity android:name="at.atn.android.DatabaseHelper"></activity> 
</application> 

감사

여기 내 코드입니다!

답변

1

매니페스트에 activity으로 활동을 선언해야합니다. DatabaseHelper은 활동이 아니므로 매니페스트에서 선언 할 필요가 없습니다. AktualisiereDB도 의심스러워 보입니다.

매니페스트에서 비 활동 활동을 삭제하기 만하면됩니다.

관련 문제