【问题标题】:Setting TextView to Array value将 TextView 设置为数组值
【发布时间】:2014-02-10 17:03:11
【问题描述】:

我正在尝试制作一个小应用程序,它在 EditText 数字中接受输入,并从数组中获取相应的值并将其显示在 TextView 中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText e = (EditText) findViewById(R.id.editText1);
    final TextView t = (TextView) findViewById(R.id.textView1);
    Button b = (Button) findViewById(R.id.button1);

    Resources res = this.getResources();

    String arr[] = getResources().getStringArray(R.array.example);

    final Editable input = e.getText();

    final String in2 = input.toString();
    int number = Integer.parseInt(in2);

    if(number < 0){
        t.setText("Input is too small");
    } else if (number > 666){
        t.setText("Input is too large");
    } else {
        final String out = arr[number].toString();
        b.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                t.setText(in2);
            }
        }); 
    } 
}

我想要这样,如果输入为 0 并且单击按钮,则 TextView 为 A。

<string-array name="example">
    <item >A</item>
    <item >B</item>
    <item >C</item>
    <item >D</item>
</string-array>

不幸的是,每当我在模拟器或手机上启动它时,它都会立即崩溃。有谁知道我做错了什么?

【问题讨论】:

  • stacktrace 真的很有帮助..

标签: java android arrays textview settext


【解决方案1】:

问题是当你启动你的应用时,你的editText 是空的。

所以in2 等于"",因此您不能将此值解析为整数。

将它移到您的 onClick 方法中:

b.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {                
        int number = Integer.parseInt(e.getText().toString());
        if(number < 0){
            t.setText("Input is too small");
        } else if (number >= arr.length){
            t.setText("Input is too large");
        } else {
            t.setText(arr[number]);
        }
    }); 
} 

【讨论】:

    【解决方案2】:

    好吧,只看代码,我不认为它会完成你想要达到的目标!

    final Editable input = e.getText();
    
    final String in2 = input.toString();
    int number = Integer.parseInt(in2);
    

    这发生在 onCreate 方法中。因此,当应用程序运行时,它会立即尝试提取一些文本,但没有要提取的内容,因此 Integer.parseInt(in2) 会抛出运行时异常。

    这是我建议的工作流程,可能需要对您的代码进行一些重写。

    在 onCreate 方法中:

    1. 通过findViewById 获取您需要的所有对象。

    2. 为editText字段和按钮设置侦听器——editText的侦听器负责跟踪用户输入的任何更改。在侦听器提供的方法中,包括以下代码:

      stringFromEditText = editText.getText().toString();

      当然,您应该提前声明这些以使其工作:

      String stringFromEditText;

      EditText 编辑文本;

    之后,您可以调用 updateTextView() 方法(您自己定义)。 你甚至不需要一个按钮!一切都在侦听器的方法中完成(例如onTextChanged

    updateTextView() 方法中,不要忘记在其中加入一些处理错误输入或空输入的逻辑:当您遇到错误输入时,只需将 stringFromEditText 的值设置为“0”。所以你以后总能成功解析它 -> 不再崩溃!

    我知道我提供的所有代码并没有太详细。但我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多