无法从静态方法访问非静态方法,Android:来自ContextWrapper类型的getResources()

时间:2013-08-22 12:40:46

标签: java android

我有一个包含覆盖项的静态类,由我的主类调用,然后添加到覆盖本身。

我可以在没有图像类型的情况下使用它,但我想使用它们,但是当我这样做时,我收到以下错误: 无法对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);

任何建议都非常感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您在此行之前设置了上下文

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

然后使用

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

因为添加我是静态方法,无法获取getResources()

的上下文

编辑:

在上下文中调用

getResources()。在您的代码中,您从静态方法调用它,但静态方法无法访问应用程序上下文的非静态方法。 所以你为上下文创建了一个静态对象并将你的上下文存储在其中。 但是你有没有检查过你设置的上下文是否为null并且在调用上面的行之前设置了?