2016-10-04 2 views
0

나는 안드로이드 응용 프로그램을 만들고 있습니다. 콘텐츠 제공자를 생성하기 위해 schematic을 사용하고 있습니다.Java에서 생성 된 참조 코드

나는 애플리케이션에서 사용되는 실제 코드가 내가 만든 클래스에서 생성된다는 것을 알고 있습니다. 이를 바탕으로 소스 코드에서 생성 된 코드를 참조하면 어떤 문제가 발생하는지 알고 싶습니다.

내가 사용하는 코드는 다음과 같다 :

package com.example.movies.data; 

@Database(
    version = MovieDatabase.VERSION, 
    packageName = "com.example.movies.provider" 
) 
public class MovieDatabase { 
    public static final int VERSION = 1; 

    @Table(MovieColumns.class) 
    public static final String MOVIE = "movie"; 

    // Some more tables here 

    @OnUpgrade 
    public static void onUpgrade(Context context, SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("drop table if exists " + MOVIE); 

    // The next SQL statement is generated out of the current class 
    db.execSQL(com.example.movies.provider.MovieDatabase.MOVIE); 
    } 
} 

생성 된 코드는 옆 :

당신이 볼 수 있듯이, 나는 소스 코드에 의해 생성 된 SQL 문을 필요
package com.example.movies.provider; 

public class MovieDatabase extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 

    // The next statement is the one I use in the source code 
    public static final String MOVIE = "CREATE TABLE movie (" 
    + MovieColumns._ID + " INTEGER PRIMARY KEY," 
    + MovieColumns.TITLE + " TEXT NOT NULL," 
    + MovieColumns.SYNOPSIS + " TEXT," 
    + MovieColumns.POSTER_URL + " TEXT NOT NULL," 
    + MovieColumns.RELEASE_DATE + " INTEGER NOT NULL," 
    + MovieColumns.RATING + " REAL)"; 

    // Some other SQL statements and functions 

    // The next function is generated out of onUpgrade 
    // in the source class MovieDatabase 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    com.example.movies.data.MovieDatabase.onUpgrade(context, db, oldVersion, newVersion); 
    } 
} 

, 언급 된 라이브러리를 사용한다는 아이디어는 모든 상용구 코드를 피하는 것입니다.

다른 대안이 있습니까?

답변

0

약간 더 나은 방법은 다음과 같습니다

@OnUpgrade 
    public static void onUpgrade(Context context, SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("drop table if exists " + MOVIE); 

    // The next SQL statement is generated out of the current class 
    com.example.movies.provider.MovieDatabase.getInstance(context).onCreate(db); 
    } 

는 적어도 각 테이블을 지정할 필요가 없습니다.

소스 코드에서 생성 된 코드를 참조하면 어떤 문제가 있는지 알고 싶습니다.

나는 진짜 문제가 없다고 말할 것입니다.

유일하게 눈에 띄는 점은 Android Studio는 클래스가 생성 될 때까지 (첫 번째 빌드에서) 컴파일 오류라고 강조합니다.