Java 当我';我能够使用/覆盖变量

Java 当我';我能够使用/覆盖变量,java,android,Java,Android,我有一个变量,当我加载应用程序时,我从共享的首选项中获取该变量 我首先初始化变量 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String camera_type = booth_preferences.getString("camera_key", "back"); 后来,我得到了这个变量,并用它做了一些事情 if(camera_

我有一个变量,当我加载应用程序时,我从共享的首选项中获取该变量

我首先初始化变量

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final String camera_type = booth_preferences.getString("camera_key", "back");
后来,我得到了这个变量,并用它做了一些事情

if(camera_type.equals("front")){
        //do something
} else if(camera_type.equals("ext")){
        //do something
} else {
        //do something
}
现在,在if语句之后,我有一个onclick监听器,它应该更改和更新该首选项

camera_button_front.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //do something
        edit_preferences.putString(camera_key, "front").commit();
    }
});
camera_button_back.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //do something
        edit_preferences.putString(camera_key, "back").commit();
    }
});
camera_button_ext.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //do something
        edit_preferences.putString(camera_key, "ext").commit();
    }
});
但是,当我试图更改变量
camera\u type
时,会出现错误,说明“无法为最终变量'camera\u type'赋值”

我曾经在onclick之后恢复变量,希望它能完全重写变量

camera_button_ext.setOnClickListener(new View.OnClickListener() {
    String camera_type;
    public void onClick(View v) {
        //do something
        edit_preferences.putString(camera_key, "ext").commit();
        camera_type = "ext";
    }
});
如果要删除
final
,则无法在If语句中使用该变量


我是Java新手,所以这应该是一个简单的答案,我只是不确定我犯了哪些错误。

你可以让一个元素变得巨大

String[] cameraType = new String[0];
和使用

if("some_String".equals(cameraType[0])){
//do smth
}

不能将值重新指定给最终变量。要在onClick方法中访问它,可以将camera_type设置为活动的成员变量

应将变量设置为非最终字段。然后,您可以在onClick(以及该类的所有其他方法)中使用它,还可以根据需要重新分配它

private String camera_type; // member variable

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    camera_type = booth_preferences.getString("camera_key", "back");
private String camera_type; // member variable

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    camera_type = booth_preferences.getString("camera_key", "back");