Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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
C# 初始化组件Xamarin中的TypeInitializationException异常_C#_Android_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

C# 初始化组件Xamarin中的TypeInitializationException异常

C# 初始化组件Xamarin中的TypeInitializationException异常,c#,android,xamarin,xamarin.forms,xamarin.android,C#,Android,Xamarin,Xamarin.forms,Xamarin.android,下面是我在Xamarin中创建的页面的代码。这是一个显示GenRegroups列表的简单页面。它在过去工作得很好,但最近,当我更改初始化列表的代码时,应用程序将运行到一个空白屏幕。因此,我暂停了调试,并看到它最初停留在listView.ItemSource=DataStorage.GenreList;。点击continue后,应用程序将抛出TypeInitializationException。我担心可能没有生成我的代码的最新版本(在启用快速部署的情况下,我以前也遇到过这种情况),所以我添加了一

下面是我在Xamarin中创建的页面的代码。这是一个显示GenRegroups列表的简单页面。它在过去工作得很好,但最近,当我更改初始化列表的代码时,应用程序将运行到一个空白屏幕。因此,我暂停了调试,并看到它最初停留在listView.ItemSource=DataStorage.GenreList;。点击continue后,应用程序将抛出TypeInitializationException。我担心可能没有生成我的代码的最新版本(在启用快速部署的情况下,我以前也遇到过这种情况),所以我添加了一个Debug.log(“x”);在出现问题的行之前,确保正在运行最新的代码。执行此操作后,应用程序开始冻结InitializeComponent()并引发相同的异常。我在这里不知道该怎么办。以下是我声明列表的代码:

namespace FBLALibraryApp2
{
public partial class GenrePage : ContentPage
{

    public GenrePage()
    {
        InitializeComponent();
        listView.ItemsSource = DataStorage.GenreList;
    }

    private void SearchBar_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void listView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        listView.SelectedItem = null;
    }

    async private void listView_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        if (e.Item is GenreGroup)
            await Navigation.PushAsync(new GenreView((GenreGroup)e.Item));
    }
    }
}
公共静态类数据存储
{
公共静态列表AllBookList=new List{new Book{Title=“Harry Potter”,Author=“J.K.Rowling”,Summary=“lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf”,Genre=new string[]{“幻想”、“冒险”},pubYear=“2017”},新书{Title=“饥饿游戏”,Author=“Suzanne Collins”,Summary=“lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf”,体裁=新字符串[]{“Sci Fi”},pubYear=“2017”},新书{Title=“夜贼”,Author=“Jack Nimble”,Summary=“lorem ipsum dolorum sdjfa;dklfja;dklfj;akdffja;dfjkaf”,体裁=新字符串[]{“神秘”},pubYear=“2017”},新书{Title=“Hardy Bros.”,Author=”Johnny Heather”,Summary=“lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf”,流派=新字符串[]{“神秘”、“喜剧”},pubYear=“2017”};
公共静态列表GenreList=新列表{new GenreGroup(“神秘”、“jd;akfjd;”),new GenreGroup(“幻想”、“dja;fdjkl”)};
publicstaticgenregroupsummary=新的genregroupsummary(“summary”、“djfsldfjldjF”);
公共静态genregroupfantasy=新的genregroupfantasy(“Fantasy”、“djfsldfjldjF”);
静态数据存储()
{
foreach(所有图书列表中的图书)
{
for(int x=0;x
我怀疑问题出在这段代码中的某个地方,因为这就是我所更改的。注意:我知道我现在的代码有点奇怪,我显式定义了GenreList,后来又重新定义了它,但我试图确保它不为null,无论出于什么原因。谢谢您的帮助

更新:在将Debug.WriteLine放在InitializeComponent之前时,它现在在Debug.WriteLine上冻结,并抛出相同的TypeInitializationEXception

更新:这是GenRegroupandBook的代码

public static class DataStorage
{
    public static List<Book> AllBookList = new List<Book> { new Book { Title = "Harry Potter", Author = "J.K. Rowling", Summary="lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf", Genre= new string[] { "Fantasy", "Adventure" }, pubYear="2017" }, new Book { Title = "The Hunger Games", Author = "Suzanne Collins", Summary = "lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf", Genre = new string[] { "Sci-Fi" }, pubYear = "2017" }, new Book { Title = "Thief in the Night", Author = "Jack Nimble", Summary = "lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf", Genre = new string[] { "Mystery"}, pubYear = "2017" }, new Book { Title = "Hardy Bros.", Author = "Johnny Heather", Summary = "lorem ipsum dolorum sdjfa;dklfja;dkfj;akdfja;dfjkaf", Genre = new string[] { "Mystery", "Comedy" }, pubYear = "2017" } };
    public static List<GenreGroup> GenreList = new List<GenreGroup> { new GenreGroup("Mystery", "jd;akfjd;"), new GenreGroup("Fantasy", "dja;fdjkl") };
    public static GenreGroup Mystery = new GenreGroup("Mystery","djfsldfjldjF");
    public static GenreGroup Fantasy = new GenreGroup("Fantasy", "djfsldfjldjF");

    static DataStorage()
    {
        foreach (Book book in AllBookList)
        {
            for (int x = 0; x < book.Genre.Length; x++)
            {
                if (book.Genre[x] == "Mystery")
                {
                    Mystery.Add(book);
                }
                else if (book.Genre[x] == "Fantasy")
                {
                    Fantasy.Add(book);
                }

            }
        }
        GenreList = new List<GenreGroup> { Mystery, Fantasy };
    }
}
public类GenreGroup:List
{
公共字符串标题{get;set;}
公共字符串说明{get;set;}
公共GenreGroup(字符串标题、字符串描述)
{
头衔=头衔;
描述=描述;
}
}
公共课堂用书
{
公共字符串标题{get;set;}
公共字符串作者{get;set;}
公共字符串摘要{get;set;}
公共字符串[]主题标题{get;set;}
公共字符串[]类型{get;set;}
公共字符串pubYear{get;set;}
}
listView.ItemsSource=DataStorage.GenreList

此行将调用
静态数据存储()
,在此静态构造函数中,
神秘
幻想
应在调用它之前初始化。因此解决方案应该是:

1) 在
GenreGroup
类中添加
public GenreGroup(){}

2) 在
数据存储
类中初始化
神秘
幻想

public class GenreGroup : List<Book>
{
    public string Title { get; set; }
    public string Description { get; set; }

    public GenreGroup(string title, string description)
    {
        Title = title;
        Description = description;
    }
}

public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Summary { get; set; }
    public string[] subjectHeadings { get; set; }
    public string[] Genre { get; set; }
    public string pubYear { get; set; }
}

此处缺少初始化:

    public static GenreGroup Mystery = new GenreGroup();
    public static GenreGroup Fantasy = new GenreGroup();

编辑:我刚刚运行了你的代码,很好。只需清理你的项目并重建它。VS有很多错误。干杯。

数据存储是初始化的还是空的?属性是
Title
Description
来自
GenreGroup
静态的吗?嗨,你解决了你的问题了吗?你尝试过我的解决方案吗如果您做了什么,请留下评论,谢谢。@Greggz属性标题和描述不是静态的,因为GenreGroup不是静态类(有许多不同的类型,因此我要创建许多不同的GenreGroup对象)。另外,我不太清楚你所说的初始化或空是什么意思。如果你能进一步解释,那就太好了。我的印象是,如果你有一个静态类,你不需要调用或初始化它,但也许我错了?@Greggz我想我已经通过公开静态GenreGroup神秘=新类型来初始化了神秘和幻想组(…);此外,我更新了我的问题,以添加GenreGroup和Book的代码。我按照您的答案进行了操作,但问题仍未解决。似乎GenrePage()构造函数中的任何第一行都会引发TypeInitializationException,无论这是Debug.WriteLine还是InitializeComponent()此行将调用不正确的静态DataStorage()。静态构造函数总是在任何其他代码之前运行。
 public static GenreGroup Mystery; // Init this
 public static GenreGroup Fantasy; // And this