如何使这个静态

时间:2012-10-27 13:41:46

标签: android andar

public static Bitmap bmp;
bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.nehe);

上述代码的错误“令牌上的语法错误”;“,预期”我已经在bmp之后放了一个分号但是仍然发生错误

这是完整的代码:

public class CustomActivity extends AndARActivity {

ARToolkit artoolkit;
CustomObject someObject;
CustomObject1 someObject1;


public static Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.nehe);  


@Override
public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    CustomRenderer renderer = new CustomRenderer();     

    super.setNonARRenderer(renderer);

    try {
        //register a object for each marker type
        artoolkit = super.getArtoolkit();

        someObject = new CustomObject
            ("test", "androidpirate.patt", 80.0, new double[]{0,0});
        artoolkit.registerARObject(someObject);

        someObject = new CustomObject
        ("test", "andson.patt", 80.0, new double[]{0,0});
        artoolkit.registerARObject(someObject);

        someObject1 = new CustomObject1("test","andrev.patt", 80.0, new double[]{0,0});
        artoolkit.registerARObject(someObject1);

        someObject1 = new CustomObject1("test","androidpat.patt", 80.0, new double[]{0,0});
        artoolkit.registerARObject(someObject1);

    } catch (AndARException ex){
        //handle the exception, that means: show the user what happened
        System.out.println("");
    }       
    startPreview();
}


@Override
public void uncaughtException(Thread thread, Throwable ex) {
    Log.e("AndAR EXCEPTION", ex.getMessage());
    finish();
}   
}

4 个答案:

答案 0 :(得分:1)

public声明只能用于类变量而不能用于函数变量

答案 1 :(得分:1)

您在静态上下文中调用“this”,“this”指的是类实例对象,因此以静态方式使用它不是有效的Java语法。另外,我不认为“this.getResources()”会返回null,直到调用onCreate(Bundle)方法为止。

您应该执行以下操作:

public static Bitmap bmp;

public void onCreate(Bundle savedInstanceState) {
    if(bmp!=null) {
        BitmapFactory.decodeResource(this.getResources(), R.drawable.nehe);
    }
...other code here

答案 2 :(得分:0)

public static Bitmap bmp =
    BitmapFactory.decodeResource(this.getResources(), R.drawable.nehe);

public static Bitmap bmp;

static {
    bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.nehe);
}

答案 3 :(得分:0)

如果您在方法中编写这些语句,则public不是局部变量的有效访问修饰符。

如果您在类中的方法之外编写这些语句,则应将这些语句组合如下:

public Bitmap bmp = 
    BitmapFactory.decodeResource(this.getResources(), R.drawable.nehe);

这是因为,只允许在方法或块之外使用初始值设定项,而不是像第二个语句那样使用赋值语句。

由于您似乎依赖于getResources()成员方法的返回值,因此bmp不能是静态的。此外,只有在确定getResources()方法的返回值有意义时才最好初始化bmp。你应该从你的课程中显示更多代码,以获得更好的帮助。