C# Xamarin C无法将C类转换为Android.content.context

C# Xamarin C无法将C类转换为Android.content.context,c#,android,xamarin.android,C#,Android,Xamarin.android,当我按下我在共享代码项目中创建的按钮时,我试图通过显示来自android项目的警报对话框来测试我的应用程序的DependencyService 当我试图通过在括号中输入“this”来设置“AlertDialog.Builder”中的上下文属性时,我得到了以下错误:无法从“CallDiver2.Droid.CallDiverter_Android”转换为“Android.Content.Context” 此外,名称空间也用“[assembly:DependencytypeofCallDiverte

当我按下我在共享代码项目中创建的按钮时,我试图通过显示来自android项目的警报对话框来测试我的应用程序的DependencyService

当我试图通过在括号中输入“this”来设置“AlertDialog.Builder”中的上下文属性时,我得到了以下错误:无法从“CallDiver2.Droid.CallDiverter_Android”转换为“Android.Content.Context”

此外,名称空间也用“[assembly:DependencytypeofCallDiverter_Android]”装饰,如果有必要的话

这是我想使用DependecyService调用的android项目中的函数:

public class CallDiverter_Android : ICallDiverter
{
    public void DivertCall(string callForwardString)
    {
        //Divert call code

        //String callForwardString = "**21*1234567890#";
        //Intent callIntent = new Intent(Intent.ActionDial); // ACTION_CALL
        //Android.Net.Uri uri = Android.Net.Uri.Parse(callForwardString);
        //callIntent.SetData(uri);
        //Android.App.Application.Context.StartActivity(callIntent);


        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        AlertDialog alert = dialog.Create();
        alert.SetTitle("Title");
        alert.SetMessage("Simple Alert");
        alert.SetButton("OK", (s, ev) =>
        {
            alert.SetMessage("This is an alert message");
        });

        alert.Show();
    }

    public void StopCallDiverting()
    {
        //Stop the call diverting action
    }
}

我应该如何解决这个问题,以便能够成功地测试dependencyService?

如果您有一个单一的活动应用程序,那么您可能只需输入即可

Android.App.Application.Context
乙二醇

但是,要在多活动应用程序中获取当前活动上下文,则需要跟踪它

有关如何跟踪当前上下文的信息,请参见此答案


如果您有一个单一的活动应用程序,那么您可能只需传入即可

Android.App.Application.Context
乙二醇

但是,要在多活动应用程序中获取当前活动上下文,则需要跟踪它

有关如何跟踪当前上下文的信息,请参见此答案


xamarin有一个技巧可以做到这一点。 而且大多数人也认为这是非常方便的方法。 在单例方法中创建MainActivity类的静态属性

internal static MainActivity Instance { get; private set; }
在MainActivity构造的末尾指定此实例对象值,如下所示

Instance = this;
现在,像这样使用它来获取您需要的上下文

 AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.Instance);

这很有效,因为大多数xamarin表单应用程序只有一个活动,即MainActivity

xamarin中有一个这样做的技巧。 而且大多数人也认为这是非常方便的方法。 在单例方法中创建MainActivity类的静态属性

internal static MainActivity Instance { get; private set; }
在MainActivity构造的末尾指定此实例对象值,如下所示

Instance = this;
现在,像这样使用它来获取您需要的上下文

 AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.Instance);
这很好,因为大多数xamarin表单应用程序只有一个活动,即MainActivity,这不起作用,因为您的类没有从activity/Context类继承。因此,无法将其转换为Android.Content.Context

只需使用Android.App.Application.Context来获取当前的Android上下文。

这不起作用,因为您的类没有从Activity/Context类继承。因此,无法将其转换为Android.Content.Context


只需使用Android.App.Application.Context来获取当前的Android上下文。

我刚刚遇到了这个错误并修复了它。 这个问题现在已经很老了,但我把我的见解放在任何遇到这个问题的人身上

事实证明,我不喜欢将用于SQLite的类放在AppName.Android.persistence名称空间而不是AppName.Droid.persistence中


我刚把Droid放回去,错误就消失了。

我刚刚有了这个错误并修复了它。 这个问题现在已经很老了,但我把我的见解放在任何遇到这个问题的人身上

事实证明,我不喜欢将用于SQLite的类放在AppName.Android.persistence名称空间而不是AppName.Droid.persistence中


我刚刚放回Droid,错误已经消失。

新建AlertDialog.Builder构造函数需要一个Android.content.context作为第一个参数,当您传递此参数时,thich不是上下文。新建AlertDialog.Builder构造函数需要一个Android.content.context作为第一个参数,当您传递此参数时,thich不是上下文。谢谢,当我按下按钮时,你的回答帮助我显示了一个对话框。虽然它现在说“Xamarin.Forms.Forms.Context”是obsolete@MetaDude抱歉,Android.App.Application.Context请重试this@TheGenetral别那么酷。我尝试了它,但它抛出了一个未捕获的异常:“无法添加窗口标记null不适用于应用程序”错误消息,并冻结了我的visual studio。另一方面,您以前的解决方案确实有效。@MetaDude这是一个单一活动应用程序吗?在单一活动中,您指的是单一窗口应用程序吗?如果是的话,那么现在只有一个窗口谢谢你,你的回答帮助我在按下按钮时显示对话框。虽然它现在说“Xamarin.Forms.Forms.Context”是obsolete@MetaDude抱歉,Android.App.Application.Context请重试this@TheGenetral别那么酷。我尝试了它,但它抛出了一个未捕获的异常:“无法添加窗口标记null不适用于应用程序”错误消息,并冻结了我的visual studio。另一方面,您以前的解决方案确实有效。@MetaDude这是一个单一活动应用程序吗?在单一活动中,您指的是单一窗口应用程序吗?如果是这样,那么现在只有一个窗口我尝试了你的解决方案,但当我启动应用程序并点击按钮时,它抛出了一堆
错误消息,并且没有显示alertDialog弹出窗口。请您分享您收到的错误。以及您如何调用DirtCall方法我尝试了您的解决方案,但当我启动应用程序并单击按钮时,它抛出了一系列错误消息,并且没有显示alertDialog弹出窗口。请您分享您遇到的错误。以及如何调用DivertCall方法嘿,我尝试了前面提出的方法,但是它冻结了VisualStudio,无法显示Aler窗口。它在LivePlayer调试日志中说:“无法添加窗口-标记null不适用于应用程序”尝试从UI线程调用它,如此设备。BeginInvokeOnMainThread=>DependencyService.Get…,我会尝试。与此同时,我在ViewModel中得到一个错误,它在构造函数中的命令处输入了一个断点。解析表达式时出错:对象引用未设置为对象的实例。希望在我发现如何解决这个新问题后,它会起作用。无论如何谢谢你!祝你好运,我想你必须自己解决命令问题,否则会出现一个新问题。嘿,我像将军之前建议的那样尝试过,但它冻结了visual studio,无法显示Aler窗口。它在LivePlayer调试日志中说:“无法添加窗口-标记null不适用于应用程序”尝试从UI线程调用它,如此设备。BeginInvokeOnMainThread=>DependencyService.Get…,我会尝试。与此同时,我在ViewModel中得到一个错误,它在构造函数中的命令处输入了一个断点。解析表达式时出错:对象引用未设置为对象的实例。希望在我发现如何解决这个新问题后,它会起作用。无论如何谢谢你!祝你好运,我想你必须自己解决指挥问题,否则会有新的问题。