2010-07-28 6 views
2

저는 아직 객체 지향 프로그래밍에 익숙하지 않으며 인스턴스 상속 클래스와 인스턴스화 된 클래스의 변수 범위에 문제가 있습니다.Android 지향 클래스의 객체 지향 범위 및 상속

여러 XML 피드를 읽고 휴대 전화의 SQLite 데이터베이스에 저장할 수있는 Android 응용 프로그램을 만들려고합니다. 각 피드는 다른 이름 ("news", "audio_mixes"등)을 가지고 있으며이 이름을 사용하여 각 피드의 데이터를 별도의 데이터베이스 테이블에 저장합니다. 각 테이블은 피드 제목을 따라 이름이 지정됩니다. 개략적 인 측면에서

이 내 수업이 어떻게 생겼는지 : 활동을 시작 각각 두 개의 버튼이 표시됩니다 alt text http://baroquedub.co.uk/private/images/Main-Title_Browser.jpg

메인 활동 - TitlesBrowser 클래스의 인스턴스 둘을. 추가 정보는 the_urlthe_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

여기 문제의 데모입니다 어떤 도움, 충고 또는지도에 대해 매우 감사드립니다.

답변