2011-11-26 47 views
-1

刚开始检查android开发,但已经有问题了。当按下bConvert按钮时,活动关闭。 outputValue.setText显然使用错误。这是怎么回事?谢谢你的帮助! :)非常基础的java的android,为什么按下按钮时程序关闭?

public class StartingPoint extends Activity { 
    TextView outputValue; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     initialize(); 
    } 

    private void initialize() { 
     Button bConvert = (Button) findViewById(R.id.bConvert); 
     EditText inputValue = (EditText) findViewById(R.id.etInput); 
     TextView outputValue = (TextView) findViewById(R.id.userOutput); 
     bConvert.setOnClickListener(convertHandler); 
    } 

    View.OnClickListener convertHandler = new View.OnClickListener() { 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      outputValue.setText("Fahrenheit: "+ 100); 
     } 
    }; 

    private float convert(float celsius) { 
     return ((celsius*9/5)+32); 
    } 
} 
+0

您有什么问题TextView outputValue = (TextView) findViewById(R.id.userOutput);线?具体来说,粘贴错误消息。 – Jeffrey

+0

这个标题没有真正的问题。 – Bert

回答

1

替换

outputValue = (TextView) findViewById(R.id.userOutput); 
1

当初始化outputValue,要创建一个局部变量,而不是你的初始化类变量。

+0

不,它没有。在类中声明的全局变量可以在没有“最终”技巧的情况下访问。我会看看我能否找到适当的,经典的参考。 ;-)解决方案确实是你的第一段。我更喜欢你的答案,因为你花时间来解释。 – davidcesarino

+0

@大卫,这就是为什么我说得相当确定,我太懒惰,不能确定。 :) – Jeffrey

+0

没有概率...对不起,我找不到官方的参考。无论如何,正如我所说的,至少在这个例子中,外部类成员不需要是“最终”或“静态”。如果你将侦听器移动到一个方法中,那么我“相当肯定”:-)它需要是“static”(而不是“final”),否则编译器会抛出着名的“无法创建静态引用到非静态字段......“这就是为什么我重复使用全局监听器的原因(并且你在android代码中看到了很多)。当然,由于初始化问题,这种情况下的全局“最终”声明将不起作用。 – davidcesarino

相关问题