2014-10-12 4 views
-2

이 메서드를 선언하면 오류가 발생합니다. 정적 컨텍스트에서는 사용할 수 없습니다. 파트에 오류가 있습니다. ArrayAdapter adapter = ... 어떤 것을 변경할 수 있습니까? 나는 전혀 모른다.정적 컨텍스트에서 사용할 수 없습니다.

protected static void myMethod() 
    { 
    arrTblNames = new ArrayList<String>(); 
    Cursor c = 
     db.rawQuery 
     (
      "SELECT name FROM sqlite_master WHERE type = 'table' AND name! = 'android_metadata'", null 
     ); 

    if (c.moveToFirst()) 
    { 
     while (!c.isAfterLast()) 
     { 
      arrTblNames.add(c.getString(c.getColumnIndex("name"))); 
      c.moveToNext(); 
     } 
    } 

    ArrayAdapter<String> adapter = 
     new ArrayAdapter<String> 
     (

       //HERE IS THE ERROR 
       this, android.R.layout.simple_spinner_item, arrTblNames 

     ); 
    adapter.setDropDownViewResource 
    (
     android.R.layout.simple_spinner_dropdown_item 
    ); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener 
    (
     new AdapterView.OnItemSelectedListener() 
     { 
      @Override 
      public void onItemSelected 
      (
       AdapterView<?> parent, View view, int pos, long id 
      ) 
      { 
       selectedtable = spinner.getSelectedItem().toString(); 
      } 
      @Override 
      public void onNothingSelected(AdapterView<?> arg0) 
      { 
       // 
      } 
     } 
    ); 
} 

답변

0

당신이 이런 경우에이 을 갖고있는 이유가 "당신이

+0

감사합니다. 어떻게이 메서드를 호출 할 수 있습니까? MainActivity.myMethod(); 하지만이 메서드에서 몇 가지 인수가 필요하다는 오류를 씁니다. 그리고 나는 어떤 것을 알았습니까? –

+0

그게 어디서 왔는지에 달렸지 만 컨텍스트 타입의 매개 변수를 전달해야만합니다. 다른 활동에서 호출하고 있다고 가정 해 봅시다.이 경우에는 MainActivity를 사용할 수 있습니다. myMethod (this); ' – igor

+0

당신은 최고입니다! 그것은 작동합니다. 저는 하루 종일이 해결책을 찾았습니다. :) –

-1

귀하의 방법은 정적 안 : 당신이 특정 클래스의 인스턴스없이 전화를 할 때

protected void myMethod() 

정적 방법이 사용된다. 그러나 클래스가 Activity으로 확장되고 아직 인스턴스화되지 않은 경우 컨텍스트가 설정되지 않습니다.

스피너 어댑터 및 기타 Context 종속적 인 작업을 작성하기 때문에 정적 메서드가 아니어야합니다.

+0

myContext을 사용하는 대신 this를 사용하는

protected static void myMethod(Context myContext) 

다음 매개 변수로 상황을 전달할 수 정적 방법으로 정적 메서드는 다른 클래스에서 호출 할 때 사용됩니다. " -- 잘못된. 다른 클래스의 인스턴스 메서드를 호출 할 수 없습니까? – marekful

+0

다른 활동에서이 메소드를 호출해야합니다. 내가 테이블을 추가/삭제할 때 회 전자에서 새로 고침 이름이 필요하므로 정적이 필요하지만 "이"를 대체하는 방법을 모르겠다 –

+0

@luketsunami 귀하의 활동은 그런 식으로 상호 작용해서는 안됩니다. 한 번에 하나만 볼 수 있다는 것을 알고 있습니다. 대신 '회 전자 활동'으로 돌아 가면'onResume'에 대한 호출을 받게됩니다. 필요한 경우 회 전자를 업데이트 할 수 있습니다. – Simas

0

정적 메서드는 해당 클래스의 개체가 아닌 클래스에 속하며 인스턴스가 연결되어 있지 않습니다. this 키워드는 항상 클래스 (객체)의 인스턴스를 참조하므로 사용할 수있는 경우에만 사용할 수 있습니다 (예 : 인스턴스 메소드에서. 당신이 중 하나는 인스턴스 멤버 수를 변경해야하므로

당신은 정적 메서드에 this을 사용할 수 없습니다 (즉,/static 오 승 방법을 정의) 또는 방법은 정적 할 필요가있는 경우 this를 사용하지 마십시오.

+0

감사합니다. –

관련 문제