【问题标题】:Why this is so(see the below two code samples)? [closed]为什么会这样(参见下面的两个代码示例)? [关闭]
【发布时间】:2018-12-22 06:07:03
【问题描述】:

代码 1:

public void displayQuantity(int number) {
    TextView quantityTV = (TextView) findViewById(R.id.quantity_tv);
    quantityTV.setText( " "+ number);
      }

代码 2:

 public void displayQuantity(int number) {
            TextView quantityTV = (TextView) findViewById(R.id.quantity_tv);
            quantityTV.setText(number);
         }

为什么代码 2 给出错误而代码 1 没有? b/w 代码 1 和 2 中存在 -“__”的区别

【问题讨论】:

  • 代码 2 给出错误,因为 textview 需要 CharSequence 所以不能支持 int 值,代码 1 没有给出错误,因为 + 运算符会自动将其转换为字符串
  • 这是因为在代码 1 中您说的是 setText( " " + number) ,这意味着您正在传递字符串,而在代码 2 中您说的是 setText(number) ,这意味着您正在传递的是 int 而不是 string .
  • @MaheshVayak 谢谢
  • @the_pooran 谢谢,明白你的意思要容易得多

标签: java android android-studio


【解决方案1】:

根据documentation

代码 1 使用“设置要显示的文本”的方法 setText(CharSequence text)

代码 2 使用 setText(int resid) 方法“使用字符串资源标识符设置要显示的文本”。您的号码很可能不是一个有效的字符串资源标识符,这会给您一个错误。即使是这样,显示的字符串也与您要显示的数量无关。

【讨论】:

    【解决方案2】:

    TextView 中,您只能设置String(CharSequence) 值,并且您的number 数据类型在int 中,如果您这样做不会显示任何错误:

              public void displayQuantity(int number) {
                TextView quantityTV = (TextView) findViewById(R.id.quantity_tv);
                quantityTV.setText(String.valueOf(number));
             }
    

    【讨论】:

    • 不完全- setText 有一个int 版本- 但它需要一个resourceID 到一个字符串资源。如果传递的 id 与字符串资源不匹配,则会抛出异常。这就是这里发生的事情。
    • @GabeSechan 是的,我简短地写了这个......
    【解决方案3】:

    number 为 int 类型,+ 运算符自动转换为 String。("" 为空 String)

    + operator for String in Java

    【讨论】:

      【解决方案4】:

      在代码 2 中尝试 number.toString() 因为您正在使用

      中的 int 进行字符串连接

      【讨论】:

        猜你喜欢
        • 2013-07-28
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        相关资源
        最近更新 更多