저는 아직 객체 지향 프로그래밍에 익숙하지 않으며 인스턴스 상속 클래스와 인스턴스화 된 클래스의 변수 범위에 문제가 있습니다.Android 지향 클래스의 객체 지향 범위 및 상속
여러 XML 피드를 읽고 휴대 전화의 SQLite 데이터베이스에 저장할 수있는 Android 응용 프로그램을 만들려고합니다. 각 피드는 다른 이름 ("news", "audio_mixes"등)을 가지고 있으며이 이름을 사용하여 각 피드의 데이터를 별도의 데이터베이스 테이블에 저장합니다. 각 테이블은 피드 제목을 따라 이름이 지정됩니다. 개략적 인 측면에서
이 내 수업이 어떻게 생겼는지 : 활동을 시작 각각 두 개의 버튼이 표시됩니다 alt text http://baroquedub.co.uk/private/images/Main-Title_Browser.jpg
메인 활동 - TitlesBrowser 클래스의 인스턴스 둘을. 추가 정보는 the_url 및 the_feed_type 개의 다른 값을 전달하는 데 사용됩니다.
@Override
public void onCreate(final Bundle icicle) {
super.onCreate(icicle);
this.setContentView(R.layout.main);
this.getNewsButton = (Button) findViewById(R.id.get_news_button);
this.getNewsButton.setOnClickListener(new OnClickListener() {
public void onClick(final View v) {
Intent doGetNews = new Intent(Main.this, TitlesBrowser.class);
doGetNews.putExtra("the_url", Main.this.getString(R.string.titles_url));
doGetNews.putExtra("the_feed_type", Main.this.getString(R.string.news_type_var));
startActivity(doGetNews);
}
});
this.getMixtapesButton = (Button) findViewById(R.id.get_mixtapes_button);
this.getMixtapesButton.setOnClickListener(new OnClickListener() {
public void onClick(final View v) {
Intent doGetMixtapes = new Intent(Main.this, TitlesBrowser.class);
doGetMixtapes.putExtra("the_url", Main.this.getString(R.string.titles_url));
doGetMixtapes.putExtra("the_feed_type", Main.this.getString(R.string.mixtapes_type_var));
startActivity(doGetMixtapes);
}
});
}
TitlesBrowser 클래스는 그것에서 onCreate 방법에서는 엑스트라를 얻을 수 및 민간 지역 변수에 저장합니다.
Intent i = getIntent();
private String theUrl = (String) i.getStringExtra("the_url");
private String theFeedType = (String) i.getStringExtra("the_feed_type");</pre>
이 클래스
1
은 /는 DatabaseHelper 클래스의 인스턴스를 생성하고, 값을 전달하기 위해 해당 클래스 공개 설정 방법을 사용하여 로컬 theFeedType에게 변수 있도록 두 가지,하지 . 그것은 기존 데이터에 대한 데이터베이스합니다 (theFeedType 각 테이블의 이름입니다)를 쿼리하는 수행 한db=new DatabaseHelper(this);
db.setTableName(theFeedType);
dbCursor=db.getReadableDatabase().rawQuery("SELECT _ID, id, title FROM "+theFeedType+" ORDER BY id", null);
다음 다른 클래스 HTTPRequestHelper 인스턴스화하여 피드 URL에서 새로운 데이터를로드/2 :
을HTTPRequestHelper helper = new HTTPRequestHelper(responseHandler);
helper.performPost(theUrl, theFeedType);
HTTP 요청이 제대로 작동하고 두 단추 중 어떤 단추를 클릭했는지에 따라 두 개의 다른 활동 각각에 적절한 XML이 표시됩니다 (즉 올바른 데이터 검색) - 따라서 theUrl 및 theFeedType 변수가 로컬임을 알고 있습니다. 가슴의 각 경우에 lesBrowser 클래스. 한 전화 :
http://baroquedub.co.uk/get-feed.php?feed=news
다른 하나 :
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="baroquedub.db";
private String table_name;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+ table_name + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"id INTEGER, " +
"title TEXT, " +
"details TEXT, " +
"picture TEXT, " +
"viewed BOOLEAN DEFAULT '0' NOT NULL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
android.util.Log.w("Baroquedub", "Upgrading database, which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS mixtapes");
onCreate(db);
}
public void setTableName(String theName){
this.table_name = theName;
}
}
나는 그것이 각각 새 테이블을 만들 기대 :
http://baroquedub.co.uk/get-feed.php?feed=audio_mixes
문제는 DatabaseHelper 클래스함께 (뉴스 또는 오디오 믹스가 부모 TitlesBrowser 클래스에서 전달되었는지 여부)
그러나 한 번만 작동합니다. 응용 프로그램을 시작하고 "뉴스"를 클릭하면 news라는 테이블이 만들어지고 해당 활동으로 돌아올 때마다 동일한 데이터베이스에서 데이터를 성공적으로 검색합니다.
하지만 다른 버튼을 클릭하여 다른 활동을 시작하면 (즉,다른 피드에 액세스) 그 이름의 데이터베이스가 존재하지 않는다는 SQL 오류가 발생합니다. 즉, onCreate db.execSQL ("CREATE TABLE ..."메서드가 다시 호출 된 것처럼 보이지 않습니다.)
마치 두 개의 인스턴스가 있지만 DatabaseHelper 클래스의 복사본이 여러 개 생성되지 않는 것입니다. ..
http://screencast.com/t/NDFkZDFmMz
이 (특히 초보자!에 대한) 설명하기 정말 까다로운 왔으며 나는 그것이 어떤 의미가 희망 I : - TitlesBrowser
여기 문제의 데모입니다 어떤 도움, 충고 또는지도에 대해 매우 감사드립니다.