在一个简单的Xamarin表单项目中,没有使用Shining library的后台作业

在一个简单的Xamarin表单项目中,没有使用Shining library的后台作业,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我试图实现Allan Ritchie提供的非常有前途的闪亮库(用于后台工作)。到目前为止,我只在一个简单的Android文件/新项目中尝试过这一点(还没有实现iOS或UWP的代码),但我无法让它运行 我正在关注这篇文章。然而,当我运行时,我得到以下异常 我从来没有碰到过这个断点 我的代码可以从 但在这里它也是内联的 App.xaml.cs public partial class App : Application { public App() { Initi

我试图实现Allan Ritchie提供的非常有前途的闪亮库(用于后台工作)。到目前为止,我只在一个简单的Android文件/新项目中尝试过这一点(还没有实现iOS或UWP的代码),但我无法让它运行

我正在关注这篇文章。然而,当我运行时,我得到以下异常

我从来没有碰到过这个断点

我的代码可以从

但在这里它也是内联的

App.xaml.cs

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        MainPage = new MainPage();
    }

    protected override async void OnStart()
    {
        var job = new JobInfo
        {
            Identifier = "YourFirstJob",
            Type = typeof(YourFirstJob),

            // these are criteria that must be met in order for your job to run
            BatteryNotLow = false,
            DeviceCharging = false,
            RequiredInternetAccess = InternetAccess.Any,
            Repeat = true //defaults to true, set to false to run once OR set it inside a job to cancel further execution
        };

        // lastly, schedule it to go - don't worry about scheduling something more than once, we just update if your job name matches an existing one
        await ShinyHost.Resolve<Shiny.Jobs.IJobManager>().Schedule(job);
    }

    protected override void OnSleep()
    {
    }

    protected override void OnResume()
    {
    }
}
public class Startup : ShinyStartup
{
    public override void ConfigureServices(IServiceCollection services)
    {
    }
}
public class YourFirstJob : IJob
{
    public YourFirstJob()
    {
    }

    public async Task<bool> Run(JobInfo jobInfo, CancellationToken cancelToken)
    {
        //await this.dependency.SomeAsyncMethod(id);

        return true; // this is for iOS - try not to lie about this - return true when you actually do receive new data from the remote method
    }
}
[Activity(Label = "SampleApp", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
[Application]
public class MainApplication : Application
{
    public override void OnCreate()
    {
        base.OnCreate();
        Shiny.AndroidShinyHost.Init(this, new SampleApp.Startup());
    }
}
你的第一份工作.cs

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        MainPage = new MainPage();
    }

    protected override async void OnStart()
    {
        var job = new JobInfo
        {
            Identifier = "YourFirstJob",
            Type = typeof(YourFirstJob),

            // these are criteria that must be met in order for your job to run
            BatteryNotLow = false,
            DeviceCharging = false,
            RequiredInternetAccess = InternetAccess.Any,
            Repeat = true //defaults to true, set to false to run once OR set it inside a job to cancel further execution
        };

        // lastly, schedule it to go - don't worry about scheduling something more than once, we just update if your job name matches an existing one
        await ShinyHost.Resolve<Shiny.Jobs.IJobManager>().Schedule(job);
    }

    protected override void OnSleep()
    {
    }

    protected override void OnResume()
    {
    }
}
public class Startup : ShinyStartup
{
    public override void ConfigureServices(IServiceCollection services)
    {
    }
}
public class YourFirstJob : IJob
{
    public YourFirstJob()
    {
    }

    public async Task<bool> Run(JobInfo jobInfo, CancellationToken cancelToken)
    {
        //await this.dependency.SomeAsyncMethod(id);

        return true; // this is for iOS - try not to lie about this - return true when you actually do receive new data from the remote method
    }
}
[Activity(Label = "SampleApp", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
[Application]
public class MainApplication : Application
{
    public override void OnCreate()
    {
        base.OnCreate();
        Shiny.AndroidShinyHost.Init(this, new SampleApp.Startup());
    }
}
MainApplication.cs

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        MainPage = new MainPage();
    }

    protected override async void OnStart()
    {
        var job = new JobInfo
        {
            Identifier = "YourFirstJob",
            Type = typeof(YourFirstJob),

            // these are criteria that must be met in order for your job to run
            BatteryNotLow = false,
            DeviceCharging = false,
            RequiredInternetAccess = InternetAccess.Any,
            Repeat = true //defaults to true, set to false to run once OR set it inside a job to cancel further execution
        };

        // lastly, schedule it to go - don't worry about scheduling something more than once, we just update if your job name matches an existing one
        await ShinyHost.Resolve<Shiny.Jobs.IJobManager>().Schedule(job);
    }

    protected override void OnSleep()
    {
    }

    protected override void OnResume()
    {
    }
}
public class Startup : ShinyStartup
{
    public override void ConfigureServices(IServiceCollection services)
    {
    }
}
public class YourFirstJob : IJob
{
    public YourFirstJob()
    {
    }

    public async Task<bool> Run(JobInfo jobInfo, CancellationToken cancelToken)
    {
        //await this.dependency.SomeAsyncMethod(id);

        return true; // this is for iOS - try not to lie about this - return true when you actually do receive new data from the remote method
    }
}
[Activity(Label = "SampleApp", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
[Application]
public class MainApplication : Application
{
    public override void OnCreate()
    {
        base.OnCreate();
        Shiny.AndroidShinyHost.Init(this, new SampleApp.Startup());
    }
}

任何帮助都将不胜感激

您可能希望将以下构造函数添加到MainApplication类中

public MainApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
    {
    }

这不是一个闪亮的异常,这是一个实例异常。您缺少一个.ctor:请参阅问题/要点“2”: