Java 无法引用局部变量

Java 无法引用局部变量,java,android,Java,Android,我是Android编程的新手,我想在点击一个按钮时做一些事情。以下是我到目前为止所做的: public class MainActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_main); Button button = (Button) findV

我是Android编程的新手,我想在点击一个按钮时做一些事情。以下是我到目前为止所做的:

public class MainActivity extends Activity {
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {


        Spinner s1,s2,s3,s4,s5,s6,s7;
        TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
        EditText ed1;

        s7 = (Spinner) findViewById(R.id.spinner7);
        s1 = (Spinner) findViewById(R.id.spinner1);
        s2 = (Spinner) findViewById(R.id.spinner2);
        s3 = (Spinner) findViewById(R.id.spinner3);
        s4 = (Spinner) findViewById(R.id.spinner4);
        s5 = (Spinner) findViewById(R.id.spinner5);
        s6 = (Spinner) findViewById(R.id.spinner6);
        txt4 = (TextView) findViewById(R.id.textView4);
        txt3 = (TextView) findViewById(R.id.textView3);
        txt5 = (TextView) findViewById(R.id.textView5);
        txt6 = (TextView) findViewById(R.id.textView6);
        txt7 = (TextView) findViewById(R.id.textView7);
        txt8 = (TextView) findViewById(R.id.textView8);
        txt9 = (TextView) findViewById(R.id.textView9);


        ed1 = (EditText) findViewById(R.id.editText1);


        s7.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val = s7.getSelectedItem().toString();
                            txt4.setText(val);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
        s2.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val2 = s2.getSelectedItem().toString();
                            txt5.setText(val2);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
        s3.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val3 = s3.getSelectedItem().toString();
                            txt6.setText(val3);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
        s1.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val1 = s1.getSelectedItem().toString();
                            txt3.setText(val1);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
        s5.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val5 = s5.getSelectedItem().toString();
                            txt7.setText(val5);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
        s6.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val6 = s6.getSelectedItem().toString();
                            txt8.setText(val6);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
        s4.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {

                            String val7 = s4.getSelectedItem().toString();
                            txt9.setText(val7);

                    }


                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });




    }}    //Syntax error, insert ";" to complete Statement
}}
公共类MainActivity扩展活动{
创建时受保护的空隙(捆绑冰柱){
超级冰柱;
setContentView(R.layout.activity_main);
按钮按钮=(按钮)findViewById(R.id.button1);
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
旋转器s1、s2、s3、s4、s5、s6、s7;
TextView txt3、txt4、txt5、txt6、txt7、txt8、txt9;
编辑文本ed1;
s7=(喷丝器)findViewById(R.id.喷丝器7);
s1=(喷丝器)findViewById(R.id.spinner1);
s2=(喷丝器)findViewById(R.id.喷丝器2);
s3=(喷丝器)findViewById(R.id.spinner3);
s4=(喷丝器)findViewById(R.id.喷丝器4);
s5=(喷丝器)findViewById(R.id.喷丝器5);
s6=(喷丝器)findViewById(R.id.喷丝器6);
txt4=(TextView)findViewById(R.id.textView4);
txt3=(TextView)findViewById(R.id.textView3);
txt5=(TextView)findViewById(R.id.textView5);
txt6=(TextView)findViewById(R.id.textView6);
txt7=(TextView)findViewById(R.id.textView7);
txt8=(TextView)findViewById(R.id.textView8);
txt9=(TextView)findViewById(R.id.textView9);
ed1=(EditText)findViewById(R.id.editText1);
s7.3.1所选监听器(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val=s7.getSelectedItem().toString();
txt4.setText(val);
}
未选择公共无效(AdapterView父级){
}
});
s2.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val2=s2.getSelectedItem().toString();
txt5.setText(val2);
}
未选择公共无效(AdapterView父级){
}
});
s3.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val3=s3.getSelectedItem().toString();
txt6.setText(val3);
}
未选择公共无效(AdapterView父级){
}
});
s1.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val1=s1.getSelectedItem().toString();
txt3.setText(val1);
}
未选择公共无效(AdapterView父级){
}
});
s5.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val5=s5.getSelectedItem().toString();
txt7.setText(val5);
}
未选择公共无效(AdapterView父级){
}
});
s6.1选择的侦听器(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val6=s6.getSelectedItem().toString();
txt8.setText(val6);
}
未选择公共无效(AdapterView父级){
}
});
s4.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val7=s4.getSelectedItem().toString();
txt9.setText(val7);
}
未选择公共无效(AdapterView父级){
}
});
}}//语法错误,请插入“;”以完成语句
}}
但是,代码中的所有变量(s1、s2、txt1、txt2,…)都出现错误“无法引用封闭范围“”中定义的非最终局部变量[var],并且在代码中指定的位置出现错误“Syntax error,insert”;“to complete Statement”。有人能帮我解决这个问题吗


谢谢!

您不能这样做,因为存在局部变量,您从调用它们;您只需将它们声明为类的属性即可

public class MainActivity extends Activity {
    Spinner s1,s2,s3,s4,s5,s6,s7;
    TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
    // The rest of your code

将局部变量声明为类变量,然后您还需要在结尾正确完成OnClickListener()方法。您需要在语法错误处用右括号和分号关闭该方法。

三条建议:

  • 与代码中的格式和缩进保持一致

  • 使用数组

  • 创建一个
    OnItemClickListener
    ,并将其重新用于所有微调器


  • 如果必须访问annonymous类之外的变量,则该变量必须是
    final
    。 你的代码

    public class MainActivity extends Activity {
        protected void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            final Spinner s1,s2,s3,s4,s5,s6,s7;
            final TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
            final EditText ed1;
    
            s7 = (Spinner) findViewById(R.id.spinner7);
            s1 = (Spinner) findViewById(R.id.spinner1);
            s2 = (Spinner) findViewById(R.id.spinner2);
            s3 = (Spinner) findViewById(R.id.spinner3);
            s4 = (Spinner) findViewById(R.id.spinner4);
            s5 = (Spinner) findViewById(R.id.spinner5);
            s6 = (Spinner) findViewById(R.id.spinner6);
            txt4 = (TextView) findViewById(R.id.textView4);
            txt3 = (TextView) findViewById(R.id.textView3);
            txt5 = (TextView) findViewById(R.id.textView5);
            txt6 = (TextView) findViewById(R.id.textView6);
            txt7 = (TextView) findViewById(R.id.textView7);
            txt8 = (TextView) findViewById(R.id.textView8);
            txt9 = (TextView) findViewById(R.id.textView9);
    
    
            ed1 = (EditText) findViewById(R.id.editText1);
    
            setContentView(R.layout.activity_main);
            Button button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
    
    
    
    
    
    
                    s7.setOnItemSelectedListener(
                            new AdapterView.OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val = s7.getSelectedItem().toString();
                                    txt4.setText(val);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
                    s2.setOnItemSelectedListener(
                            new AdapterView.OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val2 = s2.getSelectedItem().toString();
                                    txt5.setText(val2);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
                    s3.setOnItemSelectedListener(
                            new OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val3 = s3.getSelectedItem().toString();
                                    txt6.setText(val3);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
                    s1.setOnItemSelectedListener(
                            new OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val1 = s1.getSelectedItem().toString();
                                    txt3.setText(val1);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
                    s5.setOnItemSelectedListener(
                            new OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val5 = s5.getSelectedItem().toString();
                                    txt7.setText(val5);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
                    s6.setOnItemSelectedListener(
                            new OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val6 = s6.getSelectedItem().toString();
                                    txt8.setText(val6);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
                    s4.setOnItemSelectedListener(
                            new AdapterView.OnItemSelectedListener() {
                                public void onItemSelected(
                                        AdapterView<?> parent, View view, int position, long id) {
    
                                    String val7 = s4.getSelectedItem().toString();
                                    txt9.setText(val7);
    
                                }
    
    
                                public void onNothingSelected(AdapterView<?> parent) {
    
                                }
                            });
    
    
    
    
                }});    //Syntax error, insert ";" to complete Statement
        }
    }
    
    公共类MainActivity扩展活动{
    创建时受保护的空隙(捆绑冰柱){
    超级冰柱;
    
    final Spinner s1,s2,s3,s4,s5,s6,s7;
    final TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
    
    button.setOnClickListener(new View.OnClickListener() { 
        --followed by lots and lots of code-- 
    
    button.setOnClickListener(new View.OnClickListener() { [code] });
    
    private AdapterView.OnItemSelectedListener listenerForSpinner(final Spinner s, final TextView t) {
        return new AdapterView.OnItemSelectedListener() {
             public void onItemSelected(
                 AdapterView<?> parent, View view, int position, long id) {
    
                 String val = s.getSelectedItem().toString();
                 t.setText(val);
             }
    
             public void onNothingSelected(AdapterView<?> parent) {
             }
        };
    }
    
    s7.setOnItemSelectedListener(listenerForSpinner(s7, txt4));
    s2.setOnItemSelectedListener(listenerForSpinner(s2, txt5));
    ...