2013-08-22 171 views
0

我有一個靜態類,其中包含由我的主類調用,然後添加到疊加層本身的疊加項目。無法從靜態方法訪問靜態方法Android:getResources()從類型ContextWrapper

我可以得到這個工作,沒有圖像類型,但我想使用它們,但是當我這樣做時,我得到以下錯誤: 無法從類型的ContextWrapper的非靜態方法getResources()

我已經嘗試了不少東西要克服這一點,通過下面的一些導遊我已嘗試添加:

 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)); 

但是從main方法調用時,我仍然得到空指針錯誤,如果我離開圖像出來,它被正確地調用。

在main方法我把這種類,如下所示:

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);如果我刪除這個以及對它的引用,那麼一切正常。即,指針和描述顯示在地圖上,但我需要自定義指針圖標。 – 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()

編輯無法獲取上下文:

getResources()被稱爲上下文。並且在你的代碼中你從靜態方法調用它,但靜態方法不能訪問你的應用程序上下文的非靜態方法。 因此您爲上下文創建了一個靜態對象並將其上下文存儲在其中。 但你有沒有檢查你設置的上下文不是null,並在調用上面的行之前設置?

+0

我已經嘗試修改該行並添加私有靜態上下文上下文;但我仍然得到空指針錯誤。這是你的意思嗎? – user2704807

+0

我想說的是上下文的實例調用getResources()方法。如果在調用addme()之前,如果你已經爲你的靜態上下文對象設置了值,並且它不爲空,那麼上面的答案中給出的行應該工作。 – Siddhesh

+0

非常抱歉的新手問題,但我會怎麼寫呢?我有點難住。 – user2704807

相關問題