【问题标题】:Xamarin.Android Cannot pull table from Azure database in Android 10 QXamarin.Android 无法从 Android 10 Q 中的 Azure 数据库中提取表
【发布时间】:2019-10-08 19:49:16
【问题描述】:

我确实读过,因为缺乏对 Netcore 2.1 的支持

myItemsList = await App.MobileServiceAndroid.GetTable<MyTable>().ToListAsync();

目前无法在 Android 上运行,并且有一种解决方法可以在 MobileServiceClient 的构造函数中传递一个 HttpClientHandler(),所以我这样做了:

public static MobileServiceClient MobileServiceAndroid =
            new MobileServiceClient(AppConstants.AZURE_PRODUCTION_WEB_API_URL, new HttpClientHandler());

但这不完整,它仍然无法正常工作,我必须做些什么才能完成这项工作,非常感谢任何指导。

【问题讨论】:

    标签: azure http xamarin xamarin.android


    【解决方案1】:

    据我了解,您使用的是 Forms/PCL 项目,而 other solution 正在他们的 Android 项目中实现此代码。 对你来说,一旦你将using Xamarin.Android.Net; 添加到类中,你应该可以这样做:

    public static MobileServiceClient MobileServiceAndroid =
                new MobileServiceClient(AppConstants.AZURE_PRODUCTION_WEB_API_URL, new AndroidClientHandler());
    

    您很可能在获取该 using 语句时遇到问题,因为您必须按照here 所示的步骤进行操作,或在以下步骤中为您定制:

    1. 将 Xamarin Forms 项目添加到您的所有项目中。
    2. 在核心项目中创建接口ICustomClientHandler
    using System;
    using System.Net.Http;
    
    namespace Test
    {
        public interface ICustomClientHandler
        {
            HttpClientHandler GetHandler();
        }
    }
    
    1. 然后在 Droid 项目中创建一个CustomClientHandler,这将是依赖服务的 Android 部分,将帮助您检索原生 AndroidClientHandler
    using System.Net.Http;
    using Xamarin.Android.Net;
    using System.Runtime.CompilerServices;
    using Xamarin.Forms;
    using Test;
    [assembly: Xamarin.Forms.Dependency(typeof(Test.Droid.CustomClientHandler))]
    namespace Test.Droid
    {
        public class CustomClientHandler : ICustomClientHandler
        {
            public HttpClientHandler GetHandler()
            {
                return new AndroidClientHandler();
            }
        }
    }
    
    1. 也以类似的方式实现 iOS 版本,但它将改为 return new HttpClientHandler();
    2. 最后,在您的核心项目中使用如图所示的代码:
    var clientHandler = DependencyService.Get<ICustomClientHandler>().GetHandler();
    public static MobileServiceClient MobileServiceAndroid =
                new MobileServiceClient(AppConstants.AZURE_PRODUCTION_WEB_API_URL, clientHandler);
    

    【讨论】:

    • 我试过了,但没有成功,感谢您抽出宝贵的时间。我收到错误“找不到资源”
    • 你从哪里得到这个错误?是运行时还是编译时?
    • 错误出现在运行时。这应该不起作用,而是使用连接字符串通过 HTTP 直接连接到数据库吗?只是不确定你将如何做到这一点。
    • @Sammer 今天晚些时候我会试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多