Xamarin.forms: [Android, PCL] - ImageLoaderSourceHandler: ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 02์›” 13์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: xamarin/Xamarin.Forms

์„ค๋ช…

  • Android์—์„œ ์ตœ์‹  Forms ๋ฐ PCL ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ... ํ•˜๋“œ์ฝ”๋”ฉ๋œ ImageSource may ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์žˆ๋Š” XAML ImageCell ๋ฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • Shared ๋˜๋Š” .NET Standard ์†”๋ฃจ์…˜์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ๋งŒ ํ…Œ์ŠคํŠธ๋จ

<ImageCell
    ImageSource="https://www.xamstatic.com/dist/images/pages/platform/visual-studio-icon-uHIZMvQl.png"
    Text="{Binding Name}"
    Detail="{Binding Job}">
</ImageCell>
Image Loading: Error getting stream for https://www.xamstatic.com/dist/images/pages/platform/visual-studio-icon-uHIZMvQl.png: System.Threading.Tasks.TaskCanceledException: A task was canceled.
...
[0:] ImageLoaderSourceHandler: Could not retrieve image or image data was invalid: Uri: https://www.xamstatic.com/dist/images/pages/platform/visual-studio-icon-uHIZMvQl.png

๋ฒˆ์‹ ๋‹จ๊ณ„

  1. ์•„๋ž˜ repo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PCL ์ƒ˜ํ”Œ ๋กœ๋“œ
  2. ์šด์˜
  3. Visual Studio ์•„์ด์ฝ˜์ด ์žˆ๋Š” ImageCell ๋ชฉ๋ก์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ์˜ค๋ฅ˜ ๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ์ถœ๋ ฅ ํ™•์ธ
  5. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ์•ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” Shared ๋ฐ .NET Standard ์†”๋ฃจ์…˜์—์„œ์™€ ๊ฐ™์ด ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.


์‹ค์ œ ํ–‰๋™

์ „์ฒด ์ถœ๋ ฅ ๋กœ๊ทธ ๋งํฌ

[0:] Image Loading: Error getting stream for https://www.xamstatic.com/dist/images/pages/platform/visual-studio-icon-uHIZMvQl.png: System.Threading.Tasks.TaskCanceledException: A task was canceled.
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Net.Http.HttpClientHandler+<SendAsync>d__63.MoveNext () [0x00528] in <35658e59c86d40bdbb2ef0bb34b4f0c7>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Net.Http.HttpClient+<SendAsyncWorker>d__49.MoveNext () [0x000ca] in <35658e59c86d40bdbb2ef0bb34b4f0c7>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at Xamarin.Forms.Forms+AndroidPlatformServices+<GetStreamAsync>d__16.MoveNext () [0x0003e] in D:\agent\_work\2\s\Xamarin.Forms.Platform.Android\Forms.cs:448 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <657aa8fea4454dc898a9e5f379c58734>:0 
  at Xamarin.Forms.UriImageSource+<GetStreamAsyncUnchecked>d__23.MoveNext () [0x00224] in D:\agent\_work\2\s\Xamarin.Forms.Core\UriImageSource.cs:174 
[0:] ImageLoaderSourceHandler: Could not retrieve image or image data was invalid: Uri: https://www.xamstatic.com/dist/images/pages/platform/visual-studio-icon-uHIZMvQl.png

๊ธฐ๋ณธ ์ •๋ณด

์žฌ์ƒ์‚ฐ ๋งํฌ

https://github.com/mattregul/XF_ImageCellIssue

regression Android bug

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•—! ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด URL์€ ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ž…๋ ฅ ์‹œ): https://doumer.me/resolve-image-loading-error-in-xamarin-forms

๋ชจ๋“  3 ๋Œ“๊ธ€

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๊ทธ๊ฒƒ์ด ๋‹น์‹ ๊ณผ ๊ฐ™์€ SSL URL์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. https://doumer.me/2018/03/29/resolve-image-loading-error-in-xamarin-forms/
SSL ๋ฐ TLS ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์•—! ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด URL์€ ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ž…๋ ฅ ์‹œ): https://doumer.me/resolve-image-loading-error-in-xamarin-forms

์›๋ณธ repro์˜ ์ด๋ฏธ์ง€ URL์ด ์ด ์‹œ์ ์—์„œ ์™„์ „ํžˆ ๊นจ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋‚˜ netstandard ๋˜๋Š” PCL์—์„œ ๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ๋‹ค๋ฅธ URL์„ ์ฐพ์•˜๊ณ  2.5์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ PCL ์ƒ˜ํ”Œ์„ 3.1๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋กœ๋“œ๋œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ

๋‚ด ํ‰๊ฐ€๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์œผ๋ฉด ์•Œ๋ ค์ฃผ๊ณ  3.1 ์žฌํ˜„์„ ์ฒจ๋ถ€ํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰