2017-10-25 2 views
2

내가, 프로파일 설정 이미지 URL이 있는지 확인하기 위해 노력하고있어 경우에도 실행 문, ImageView에로드하는 경우 :코 틀린 그래서 경우는 false

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

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

image는 널 (NULL) 문자열입니다. 문제는 hasImage이 거짓 인 경우에도 당신이 볼 수 있듯이, 그것은 여전히 ​​이미지를로드한다는 것입니다 :

WHYYYYY

그러나, 나는 val hasImage = false을 할 경우 예상대로 작동합니다.

나는 여기서 무슨 일이 일어나고 있는지에 대해 매우 혼란 스럽습니다. if 상태가 여전히 실행되는 이유는 무엇입니까?

답변

2

아마 컴파일 문제가있다 . 스크린 샷은 불가능한 시나리오를 보여줍니다. 앱을 어디에서 시작합니까? 다시 빌드 한 다음 다시 디버그하십시오. 또한 일부 로그를 추가하십시오.

부울 표현식을 검사하기로 선택한 방식 때문이 아닙니다 ...

+0

그냥 응용 프로그램을 시작하려면 Shift + F9를 사용하십시오. 나는 재건을 시도 할 것이다. 어떤 종류의 로그를보고 싶습니까? (미안 해요, 안드로이드/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

그런 식으로 정확하게 동일한 문제가 발생합니다. 나는 틀릴 수도 있지만, 나는 그것이 끈에 대한 나의 점검과 관련이 있다고 생각하지 않는다; 이미지에서 볼 수 있듯이, 그것은 bool이 거짓이라고 말합니다. –

+0

로그 추가 중? Log.d ("image", "Image is : $ image") 이미지가 처음 null이 아님을 확인하십시오. –

+0

null이 아닙니다. 스크린 샷의 오른쪽 하단을 보면 ""인 것을 알 수 있습니다. 나는 로그를 할 것이고, 그것이 나오는 것을 볼 것이다. * 편집 : * 확인, 그것은 비어 있습니다. –