2013-08-22 4 views
0

У меня есть статический класс, содержащий элементы оверлея, который вызывается моим основным классом, а затем добавляется к самому оверлею.Не удается получить доступ к статическим методам из статического метода, Android: getResources() из типа ContextWrapper

Я могу заставить это работать без типов изображений, но я хотел бы использовать их, однако, когда я это сделаю, я получаю следующую ошибку: Невозможно сделать статическую ссылку на нестатический метод getResources() из типа ContextWrapper

Я попытался довольно много вещей, чтобы преодолеть это, следуя некоторые руководства я пытался добавить:

 private static Context context; 

    public void onCreate(){ 
     super.onCreate(); 
     Mine.context = getApplicationContext(); 
    } 

    public static Context getAppContext() { 
     return Mine.context; 
    } 

Я также гарантировал, что у меня есть соответствующий класс в качестве приложения в манифесте.

Класс выглядит следующим образом:

public static ArrayList<ExtendedOverlayItem> array = new ArrayList<ExtendedOverlayItem>(); 

public ArrayList<ExtendedOverlayItem> getMine() { 
    return array; 
} 



public static void addMe() { 
    Drawable myDrawable = getResources().getDrawable(R.drawable.draw); //This is the line that doesn't work 
    ExtendedOverlayItem myMarker1 = new ExtendedOverlayItem(
      "sample", "sample", new GeoPoint(85.123456, 
        -14.123456), null); 
    myMarker1.setMarker(myDrawable); 

    myMarker1.setDescription("This is a test description"); 
    array.add(myMarker1); 
} 

private static Context context; 

    public void onCreate(){ 
     super.onCreate(); 
     Mine.context = getApplicationContext(); 
    } 

    public static Context getAppContext() { 
     return Mine.context; 
    } 

Я попытался добавить следующее:

myMarker1.setMarker(Mine.getAppContext().getResources().getDrawable(R.drawable.example)); 

Но я все еще получаю нулевые ошибки указателя при вызове из главного метода, если я покину изображения это называется правильно.

В основной метод, который я называю этот класс следующим образом:

Mine.addMe(); 
ItemizedOverlayWithBubble<ExtendedOverlayItem> thisThing = new ItemizedOverlayWithBubble<ExtendedOverlayItem>(this, Mine.array, map); 
map.getOverlays().add(thisThing); 

Любой совет высоко оценили.

+0

Вы проверили, что ваш контекст равен нулю или нет? вы пробовали с контекстом активности? – Siddhesh

+0

, на какой строке вы получите эту ошибку? – Siddhesh

+0

Ошибка в строке: Drawable myDrawable = getResources(). GetDrawable (R.drawable.draw); Если я удалю это и ссылку на него, все будет работать. I. Указатель и описание отображаются на карте, но мне нужно иметь свой значок значка. – user2704807

ответ

0

В статическом методе Java не удается получить доступ к нестационарному методу или переменной.

One of the basic rules of working with static methods is that you can’t access a nonstatic method or field from a static method because the static method doesn’t have an instance of the class to use to reference instance methods or fields.

для получения дополнительной информации Document

здесь хороший пример how to access them

+0

Есть ли способ обойти это, или я могу что-то изменить, чтобы заставить это работать? – user2704807

0

если у вас есть контекст установлен перед этой линией

Drawable myDrawable = getResources().getDrawable(R.drawable.draw); 

затем использовать

Drawable myDrawable = context.getResources().getDrawable(R.drawable.draw); 

, как добавить меня статический метод и не может получить контекст для getResources()

EDIT:

getResources() вызывается контексте. и в вашем коде вы вызываете его из статического метода, но статический метод не может получить доступ к нестатистическому методу контекста ваших приложений. , поэтому вы создали статический объект для контекста и сохранили в нем свой контекст. , но вы проверили, что установленный вами контекст не равен нулю и установлен перед вызовом выше строки?

+0

Я пробовал модифицировать эту строку и добавить закрытый статический контекст контекста; но я все еще получаю ошибку с нулевым указателем. Это ты имел в виду? – user2704807

+0

Я хочу сказать, что метод getResources() вызывается в контексте контекста. если перед вызовом addme(), если вы установили значение для вашего статического контекстного объекта, и оно не равно нулю, то строка, указанная в приведенном выше ответе, должна работать. – Siddhesh

+0

Очень жаль нового вопроса, но как я могу это написать? Я немного в тупике. – user2704807

Смежные вопросы