【问题标题】:how to check equivalent in Kotlin如何在 Kotlin 中检查等价物
【发布时间】:2020-01-09 17:17:02
【问题描述】:

我从服务器获得了一些数据,我想将它与从 EditText 获得的数据进行比较。 我的服务器端很简单:

<?php 
   echo "123456789";
?> 

我的 Kotlin 客户端是:

if (it==password){
                startActivity(intent)
                finish()
            }

'it' 是指 Volley StringRequest 响应,'password' 是从 EditText 中提取的文本,如下所示:

val password=userPassword.text.toString()

但是这两个永远不会相等,即使我写的是 123456789

【问题讨论】:

  • 打印出来的itpassword 是什么样子的?
  • 我得到日志,答案是:Log_wrongPass: pass=123456789 server=123456789
  • 某处是否有额外的空白?如果两者都是123456789,那么您的支票没问题,问题出在其他地方。
  • 没错,我是手动检查的,意思是,我写的不是服务器响应:“123456789”,并且与用户输入相比,它有效,所有问题都在服务器的响应中。但我的服务器端是如此简单!那是什么问题,
  • 您能否发布更多代码以便我们更好地理解上下文?

标签: android kotlin android-volley


【解决方案1】:

尝试it.compareTo()作为条件:

// it.compareTo(password) == 0
it.compareTo(password).compareTo(0)

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-comparable/compare-to.html

abstract operator fun compareTo(other: T): Int

将此对象与指定对象进行比较以进行排序。

返回

  • 如果此对象等于指定的其他对象 (0),则为零,

  • 如果小于其他 (-32),则为负数,

  • 如果大于其他值,则为正数 (32)。

【讨论】:

  • 不,等等!现在它适用于所有条件
  • compareTo 方法对相等的字符串返回零,如果参数的 ASCII 值较小,则返回正值,如果参数的 ASCII 值较大,则返回负值。
  • 这表示it &gt; password,与it == password有很大不同
  • 提一下为什么你会尝试这个真的很有帮助。 == 在类型不同时不一定有效,但比较可能。
  • @Tenfour04 它在匹配时返回Int,其值为0。文档并没有太多需要解释的地方——我不会再花时间在被否决的答案上。
【解决方案2】:

我找到了:虽然服务器返回的正是"123456789",但我不知道为什么凌空响应在答案末尾有空格,所以答案是:"123456789 "

所以我修剪了响应字符串的结尾并且它起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多