【问题标题】:Local variable may not been initialized局部变量可能未初始化
【发布时间】:2012-01-27 02:01:16
【问题描述】:

如何初始化自动完成?我不能将它与 AutoCompleteTextView 一起使用,因为它会告诉我局部变量是重复的。也尝试将其声明为静态,但不允许这样做。

请指教!

public class Search extends Activity {
    public void onCreate(Bundle savedInstanceSate) {
        final int autoComplete;
        super.onCreate(savedInstanceSate);
        setContentView(R.layout.searchshop);

         //The duplicate im talking about
        AutoCompleteTextView autoCompletee = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, shops);
        autoCompletee.setAdapter(adapter); 
        autoCompletee.setThreshold(1);
        autoCompletee.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)  {
                Intent intent;
                int index=999;
                for(int i=0;i<shops.length;i++) {
                        //The local variable autoComplete may not been initialized
                    if(shops[i].equals(Integer.toString(autoComplete))) {
                        index=i;
                        break;
                    }
                }
                switch(index) {
                    case 0:
                        intent=new Intent(Search.this, Adidas.class);
                        startActivity(intent);
                        break;
                    case 1:
                        intent=new Intent(Search.this, Affin.class);
                        startActivity(intent);  
                        break; 
                }
            }
        }); 
    }

    static final String[] shops = new String[] {
                "Adidas", "Affin Bank", "Alam Art", "Al Amin"
    };
}

【问题讨论】:

  • 这毫无意义。您有一个名为 autoComplete 的 int 变量,它从未分配过任何值。所以当然它没有被初始化。你有什么问题?
  • 答案很大程度上取决于您希望autoComplete 具有什么价值。
  • 问题不是如何,而是为什么。据我所知,除了一个 equals 调用外,没有使用该变量,该调用始终返回 false。
  • 抱歉,我是新手。以前 autoComplete 是使用 AutoCompleteTextView 初始化的,但这会导致“无法在以不同方法定义的内部类中引用非最终变量 autoComplete”。一旦我用 final 声明 autoComplete,它就会告诉我我有变量重复。有没有人可以过来看看? stackoverflow.com/questions/8997684/…

标签: java android


【解决方案1】:

int autoComplete 修改为staticfinal 等一点都不重要,因为编译器会抱怨您已经有一个名为“autoComplete”的变量这一事实。在您的实际代码示例中,您将 AutoCompleteTextView 命名为“autoCompletee”,其中两个 e 与 autoComplete 不同,这样可以正常工作。但我建议使用更有意义的变量名称,例如 int autoCompleteValue 或类似的名称。无论哪种方式,问题都是您有变量冲突。一旦你在范围内有一个具有特定名称的变量,你就不能再次使用该名称......

【讨论】:

    【解决方案2】:

    你有 autoComplete 字段作为局部变量,需要设置为一些默认值。

    只需设置final int autoComplete=0;

    将此作为代码中的第三个语句,前两个语句应该是 super.... 和 setContent(...)

    【讨论】:

    • 他会有一个总是等于0的变量吗?干什么用的?
    • 有什么用?欧普知道。有问题的问题是,局部变量没有初始化,这将通过答案来解决。答案是问题。投反对票没有意义。在代码中,没有给自动完成赋值的情况。
    • OP 很困惑,你无助于解开他的困惑。
    • 我不会对你投反对票,但我知道为什么其他人会投反对票。是的,您给出了答案,但您的答案没有帮助,对 OP 或公众都没有实际价值。 (这不完全是你的错,问题本身有点混乱,但仍然。)
    • @MK,在我看来这是一个逐步的过程,我猜OP正在学习,因为他一一解决问题,学习。我的观点是,让开发人员提出问题,为什么我们需要这个,而不是我们决定。在不解决局部变量问题的情况下,如果我们发起另一个讨论会增加更多的混乱,为什么我们在那里使用那个变量。无论如何,这是我的观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多