Очень простое приложение Xamarin не отображает изображение онлайн - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь отобразить изображение с помощью очень простого приложения Xamarin на Android:

<?xml version="1.0" encoding="utf-8"?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="Test19Oct13.MainPage">
        <StackLayout>
            <Image x:Name="backgroundImage" Source="https://giphy.com/gifs/internet-facebook-zi-l41lX2yEwhnD6QrLi" AbsoluteLayout.LayoutBounds="0,0,1,1"   AbsoluteLayout.LayoutFlags="All" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Aspect="AspectFill"/>
        </StackLayout>
    </ContentPage>

Раньше это работало, но изображения больше не отображаются на Android (они отображаются на iOS). Мои настройки Android-сборки установлены таким образом, чтобы реализация HttpClient была AndroidClientHandler, а реализация SSL / TLS - Native TLS 1.2+ (настройки прилагаются здесь: androidBuildSettings

Может кто-нибудь сказать мне, почему изображение не соответствуетотображение?

РЕДАКТИРОВАТЬ: У меня есть коллега, который работает под управлением версии 16.2.5 Visual Studio, и этот код работает отлично. Мой код работает на версии 16.3 и не работает. Я включил скриншот егонастройки: oldVSsettings

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Создайте пользовательский рендерер для элемента управления изображением, как показано ниже,

public class CustomImageRenderer : ImageRenderer
{
    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        try
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == "IsLoading")
            {
                var handler = Xamarin.Forms.Internals.Registrar.Registered.GetHandlerForObject<IImageSourceHandler>(Element.Source);
                if (!Element.IsLoading && Control != null && Control?.Image == null && handler is ImageLoaderSourceHandler)
                {
                    var imageLoader = Element.Source as UriImageSource;
                    var imgPath = imageLoader.Uri.OriginalString;
                    NSUrlSession session = NSUrlSession.SharedSession;
                    var task = session.CreateDataTask(new NSUrl(imgPath), (data, response, error) =>
                    {
                        InvokeOnMainThread(() =>
                        {
                            if (data != null)
                            {
                                Control.Image = UIImage.LoadFromData(data);
                            }
                        });
                    });
                    task.Resume();
                }
            }
        }
        catch (Exception ex)
        {
            //Handle exception
        }
    }
}
0 голосов
/ 14 октября 2019

URL, который вы указали, возвращает 403:

HTTP request sent, awaiting response... 403 Forbidden
2019-10-13 17:04:54 ERROR 403: Forbidden.

Также возвращается:

enter image description here

У Giphy есть APIкоторый должен быть использован (https://developers.giphy.com/docs/sdk) для правильного доступа к его содержимому.

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