2011-03-10 2 views
0

sqlite 데이터베이스의 데이터를 Android의 회 전자 (드롭 다운)에 채우는 방법을 안내했습니다.Android 회 전자 - 비 정적 메서드 도움말에 대한 정적 참조를 만들 수 없습니다.

Cannot make a static reference to the non-static method fetchAllCategories() from the type DatabaseAdapter 

내 코드는 다음과 같다 : EditTask에서

:

private void fillData() { 
     Cursor categoriesCursor; 
     Spinner categoriesSpinner = (Spinner) findViewById(R.id.spinDept); 
     categoriesCursor = DatabaseAdapter.fetchAllCategories(); 

     startManagingCursor(categoriesCursor); 

     String[] from = new String[] { DatabaseAdapter.CAT_NAME }; 

     int[] to = new int[] { R.id.tvDBViewRow }; //this part hasnt been implemented in to the layout yet 

     SimpleCursorAdapter categoriesAdapter = new SimpleCursorAdapter(this, 
       R.layout.db_view_row, categoriesCursor, from, to); 

     categoriesSpinner.setAdapter(categoriesAdapter); 
    } 

그리고 내 DatabaseAdapter 클래스의

나는 다음과 같은 한 :

public Cursor fetchAllCategories() { 
    if (mDb == null) { 
     this.open(); 
    } 
    String tableName = "CAT_TABLE"; 
    return mDb.query(tableName, new String[] { CAT_ID, CAT_NAME }, null, 
      null, null, null, null); 
} 
그러나, 나는 오류를 얻고있다

코드 위반 줄 :

categoriesCursor = DatabaseAdapter.fetchAllCategories(); 

저는 Java/Android에 익숙하지 않기 때문에 단순하지만 분명 할 수 있지만 도움이 많이되었습니다!

답변

1

먼저 DatabaseAdapter 개체를 인스턴스화해야합니다. 예를 들어 다음과 같이

DatabaseAdapter myDbAdapter = new DatabaseAdapter(); 
categoriesCursor = myDbAdapter.fetchAllCategories(); 
+0

도움 주셔서 감사합니다. 코드의 두 번째 섹션은 "정적 컨텍스트에서 사용할 수 없습니다."및 "비 정적 필드 mDb에 정적 참조를 만들 수 없습니다."와 같은 추가 오류를 발생시킵니다. 첫 번째 섹션을 사용하면 다음과 같은 오류도 발생합니다. DatabaseAdapter 유형에 대해 fetchAllCategories() 메소드가 정의되지 않았습니다. – user319940

+0

DatabaseAdapter를 자신의 구현에서 사용한 클래스 이름으로 바꿔야합니다. –

+0

클래스 이름은 DatabaseAdapter입니다. 생성자에 다른 인수가 필요하므로 방금 DatabaseAdapter를 사용했습니다. myDbAdapter = new DatabaseAdapter (null); 이 문제를 해결 한 것으로 보이지만 여전히 categoriesCursor에 오류가 있습니다 : categoriesCursor를 확인할 수 없습니다. – user319940

0

당신의 코드가 작동을 할 수 있으려면, 당신은) 정적 메소드 fetchAllCategoires을 (선언 할 필요가 : 당신이 DatabaseAdapter 개체를 인스턴스화하지 않았기 때문에

public static Cursor fetchAllCategories() 

, 당신 정적 인 키워드가 메소드 선언에 나타나지 않으면 클래스 이름 참조로 메소드 중 하나를 호출 할 수 없습니다.

+0

불행히도이 문제를 해결하기 위해 다음과 같은 오류가 발생합니다. "정적 컨텍스트에서 사용할 수 없습니다."및 " 비 정적 필드 mDb에 대한 정적 참조 " – user319940

+0

ahh, mDb 오류와 관련하여, 이는 아마도 mDb가 정적으로 선언되지 않은 전역 변수이기 때문일 수 있습니다. 아마도 클래스를 인스턴스화하고 인스턴스에서 fetchAllCategories() 메서드를 호출해야합니다. –

관련 문제