2017-10-25 8 views
2

私は、プロファイルが設定された画像URLを持っているかどうかを確認しようとしていた場合にも実行文は、ImageViewにそれをロードする場合:Kotlinはとても場合はfalse

val hasImage = image != null && image.isNotBlank() 

if (hasImage) { 
    Picasso.with(context).load(image).into(row.image) 
} 

imageはNULL文字列です。問題は、hasImageがfalseの場合でも、あなたが見ることができるように、それはまだ、画像をロードすることです:

WHYYYYY

しかし、私はval hasImage = falseを行う場合に予想されるとして、それは動作します。

私はここで何が起こっているかについて信じられないほど混乱しています。 ifの条件がまだ実行されているのはなぜですか?

答えて

2

おそらくコンパイル問題があります。スクリーンショットは、不可能なシナリオを示しています。あなたはどこでアプリを起動しますか?再構築してから再度デバッグしてください。また、いくつかのログを追加しようとします。

ブール式のチェック方法を選択したためではありません...

+0

私はちょうどShift + F9を使用してアプリを起動します。私は再建を試みます。どんな種類のログを見たいですか? (申し訳ありません、これはAndroid/Kotlinでの私の経験の2日目です) –

+0

ブール値のログを追加してください。例: – s1m0nw1

+0

リビルドがトリックを行ったようです!ありがとう!私は、なぜ地球上でそれが実行されたのかを理解しようと、あまりにも多くの時間を費やしました。 –

1

イメージが空の文字列( "")の場合、ブール値はtrueと評価され、ifブランチは実行されます。それに応じて条件を変更して、および/または明確化のために、この標準ライブラリ関数を使用する:

isNullOrBlank() 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-blank.html)このよう

if (!image.isNullOrBlank()) { 
    Picasso.with(context).load(image).into(row.image) 
} 
+0

このようにして正確に同じ問題が発生します。私は間違っているかもしれないが、私はそれが文字列の私の点検と関係しているとは思わない。あなたがイメージで見ることができるように、ブールは偽であると言います。 –

+0

ログを追加しますか? Log.d( "image"、 "Image is:$ image")、最初に画像がヌルでないことを確認してください。 –

+0

ヌルではありません。スクリーンショットの右下を見ると、それが ""であることがわかります。しかし、私はログをやって、それがどうなってくるのか見てみましょう。 *編集:*確認、それは空です。 –

関連する問題