Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Xamarin.Android中,需要通过调用Xamarin.Forms使用DependencyService来使用活动_Xamarin_Xamarin.forms_Xamarin.android_Google Pay - Fatal编程技术网

在Xamarin.Android中,需要通过调用Xamarin.Forms使用DependencyService来使用活动

在Xamarin.Android中,需要通过调用Xamarin.Forms使用DependencyService来使用活动,xamarin,xamarin.forms,xamarin.android,google-pay,Xamarin,Xamarin.forms,Xamarin.android,Google Pay,我在Xamarin.Forms+Xamarin.Android中手动实现。我打电话给Xamarin。表格: DependencyService.Get<IPay>().Pay(); 但在“这个”中有问题-需要使用活动。如何实现?正如您在Xamarin on提供的一些示例中所看到的,您可以在Pay_Droid类中使用应用程序的“”,如下所示: Context _context; public Pay_Droid(Context context) : base(context) {

我在Xamarin.Forms+Xamarin.Android中手动实现。我打电话给Xamarin。表格:

DependencyService.Get<IPay>().Pay();

但在“这个”中有问题-需要使用活动。如何实现?

正如您在Xamarin on提供的一些示例中所看到的,您可以在
Pay_Droid
类中使用应用程序的“”,如下所示:

Context _context;

public Pay_Droid(Context context) : base(context)
{
    _context = context;
}

public void Pay()
{
    ...
    AutoResolveHelper.ResolveTask(paymentsClient.LoadPaymentData(request), _context, LOAD_PAYMENT_DATA_REQUEST_CODE);
    ...
}

首先,您可以在MainActivity类中创建公共静态MainActivity,然后在MainActivity OnCreate()方法中将当前MainActivity分配给macvivity:

最后,您可以通过MainActivity.macvivivity查看活动

public void Pay()
{
...
AutoResolveHelper.ResolveTask(
            paymentsClient.LoadPaymentData(request),
            MainActivity.macvivity,
            LOAD_PAYMENT_DATA_REQUEST_CODE);
...
}

对于Xamarin,您可以使用:

public void Pay() => AutoResolveHelper.ResolveTask(
                    PaymentsClient.LoadPaymentData(request),
                    Platform.CurrentActivity,
                    LOAD_PAYMENT_DATA_REQUEST_CODE);

您是否测试过这是否会导致内存泄漏?在本机Android(Java)中,维护对上下文的静态引用将导致内存泄漏。
public void Pay()
{
...
AutoResolveHelper.ResolveTask(
            paymentsClient.LoadPaymentData(request),
            MainActivity.macvivity,
            LOAD_PAYMENT_DATA_REQUEST_CODE);
...
}
public void Pay() => AutoResolveHelper.ResolveTask(
                    PaymentsClient.LoadPaymentData(request),
                    Platform.CurrentActivity,
                    LOAD_PAYMENT_DATA_REQUEST_CODE);