Xamarin формы: ImageLoaderSourceHandler: не удалось получить изображение или данные изображения были недействительными: - PullRequest
0 голосов
/ 09 октября 2019

Получение сообщения об ошибке ниже при попытке показать изображение в пользовательском интерфейсе.

Сведения об исключении:

[0:] ImageLoaderSourceHandler: Could not retrieve image or image data was invalid: Uri: "imageurl"
[0:] Image Loading: Error getting stream for "imageurl": System.ObjectDisposedException: Can not access a closed Stream.
  at System.IO.StreamHelpers.ValidateCopyToArgs (System.IO.Stream source, System.IO.Stream destination, System.Int32 bufferSize) [0x0003a] in <46c2fa109b574c7ea6739f9fe2350976>:0 
  at System.IO.MemoryStream.CopyToAsync (System.IO.Stream destination, System.Int32 bufferSize, System.Threading.CancellationToken cancellationToken) [0x00000] in <46c2fa109b574c7ea6739f9fe2350976>:0 
  at Xamarin.Forms.UriImageSource.GetStreamAsyncUnchecked (System.String key, System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00310] in D:\a\1\s\Xamarin.Forms.Core\UriImageSource.cs:185 
  at Xamarin.Forms.UriImageSource.GetStreamFromCacheAsync (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00140] in D:\a\1\s\Xamarin.Forms.Core\UriImageSource.cs:209 
  at Xamarin.Forms.UriImageSource.GetStreamAsync (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x000f0] in D:\a\1\s\Xamarin.Forms.Core\UriImageSource.cs:139 
  at Xamarin.Forms.UriImageSource.GetStreamAsync (System.Threading.CancellationToken userToken) [0x00056] in D:\a\1\s\Xamarin.Forms.Core\UriImageSource.cs:78 
Debugger Connection Lost: Debugger lost connection to the running application. Likely this means the application terminated unexpectedly.

Сведения о версии

Xamarin forms Version: 4.2.0.848062
Target Framework: Android 9.0 Pie
Target Android Version: Android 9.0(API Level 28 - Pie)

Я использую приведенный ниже код для отображения изображения в пользовательском интерфейсе:

image.Source = ImageSource.FromUri (new Uri (ImageUrl));

Проблема связана только спроект Android. Пройдите через несколько похожих тем, но ни одна из них мне не поможет.

1 Ответ

1 голос
/ 09 октября 2019

Загрузка изображения с удаленного URL не очень удобна для Android. Поэтому я предлагаю вам использовать плагин FFImageLoading . FFImageLoading для форм обеспечивает CachedImage - прямую замену класса Image. Он используется точно так же, но имеет некоторые дополнительные свойства.

Во-первых, добавьте следующие пакеты NuGet в каждого проекта (iOS и Android) в своем решении.

Xamarin.FFImageLoading

Xamarin.FFImageLoading.Forms,

Xamarin.FFImageLoading.Transformations (if you’ll use transformations like CircleTransformation)

Xamarin.FFImageLoading.Svg (for SVG support)

Xamarin.FFImageLoading.Svg.Forms (for SVG support)

SkiaSharp (for SVG support)

Затем инициализируйте средство визуализации на отдельных платформах, прежде чем инициировать формы.

в iOS -> AppDelegate.cs

FFImageLoading.Forms.Platform.CachedImageRenderer.Init();  

в Android -> MainActivity.cs

FFImageLoading.Forms.Platform.CachedImageRenderer.Init(enableFastRenderer: true);

в xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="FFImageLoading.Forms.Sample.Pages.XamlSimpleExamplePage"
    xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
    Title="Basic XAML Example">
    <ContentPage.Content>
        <ffimageloading:CachedImage HorizontalOptions="Center" VerticalOptions="Center"
            WidthRequest="300" HeightRequest="300"
            DownsampleToViewSize="true"
            Source = "{Binding xxx}">
        </ffimageloading:CachedImage>
    </ContentPage.Content>
</PFContentPage>

И вот аналогичный случай, который вы можете проверить ImageCell не отображает изображение только на Android .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...