首页 > 解决方案 > 使用 Xamarin 在我的 db Slite 中插入寄存器,错误

问题描述

我将此数据插入到我的 Sqlite Db 中,但是当我单击按钮时,应用程序会立即关闭

        private List<Tick> _tick;
        public List<Tick> Tick
        {
            get { return _tick; }
            set
            {
                _tick = value;
                RaisePropertyChanged();
            }
        }

        private string _title;
        public string Titulo
        {
            get { return _title; }
            set
            {
                _title = value;
                RaisePropertyChanged();
            }
        }

        private string _description;
        public string Description
        {
            get { return _description; }
            set
            {
                _description = value;
                RaisePropertyChanged();
            }
        }

这是方法

        public ICommand SaveCommand => new Command(async () => await AddTiket());

        private async Task AddTiket()
        {
            Tick ticks = new Tick
            {
                Titulo = Titulo,
                Description = Description
            };

            App.CustomerRepository.AddOrUpdate(ticks);
            Console.WriteLine(App.CustomerRepository.StatusMessage);
        }

CustomerRepository 是我拥有所有方法的地方,当 StatusMessage 存储在数据库中时,它会在控制台中向我发送一条消息。

我只是显示他们的标题和描述,这样代码就不会那么长了谢谢你的帮助,我正在学习。

标签: xamarinxamarin.formsxamarin.ios

解决方案


根据您的描述,您没有在 AddTiket 事件中使用Awaitfor 。App.CustomerRepository.AddOrUpdate(ticks);您想将 Tick 记录添加到 sqlite 中,看不到CustomerRepository class,但我做了一个简单的示例,您可以看看。

public class SQLiteHelper
{
    SQLiteAsyncConnection db;
    public SQLiteHelper(string dbPath)
    {
        db = new SQLiteAsyncConnection(dbPath);
        db.CreateTableAsync<Tick>().Wait();
    }

    //Insert and Update new record
    public Task<int> SaveItemAsync(Tick tick)
    {
        if (tick.Id != 0)
        {
            return db.UpdateAsync(tick);
        }
        else
        {
            return db.InsertAsync(tick);
        }
    }

    //Delete
    public Task<int> DeleteItemAsync(Tick tick)
    {
        return db.DeleteAsync(tick);
    }

    //Read All Items
    public Task<List<Tick>> GetItemsAsync()
    {
        return db.Table<Tick>().ToListAsync();
    }


    //Read Item
    public Task<Tick> GetItemAsync(int Id)
    {
        return db.Table<Tick>().Where(i => i.Id == Id).FirstOrDefaultAsync();
    }
}

在 App.xaml.cs 中创建静态 SQLiteHelper

 public partial class App : Application
{      
    static SQLiteHelper db;
    public static SQLiteHelper SQLiteDb
    {
        get
        {
            if (db == null)
            {
                db = new SQLiteHelper(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Tickdb.db3"));
            }
            return db;
        }
    }
    public App()
    {
        InitializeComponent();
        

向 sqlite 添加数据,在 ListView 中显示所有数据。

 <StackLayout>

        <Button
            x:Name="btn1"
            Command="{Binding SaveCommand}"
            Text="add tick" />
        <ListView x:Name="listview1" ItemsSource="{Binding ticks}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Label Text="{Binding Titulo}" />
                            <Label Text="{Binding Description}" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>

 public partial class Page5 : ContentPage
{
    public ICommand SaveCommand => new Command(async () => await AddTiket());
    private ObservableCollection<Tick> _ticks; 
    public ObservableCollection<Tick> ticks
    {
        get  { return _ticks; }
        set
        {
            _ticks = value;
            OnPropertyChanged("ticks");
        }
    }                             
    public Page5()
    {
        InitializeComponent();
        this.BindingContext = this;
    }
    private async Task AddTiket()
    {
        Tick tick = new Tick()
        {
            Titulo = "title 1",
            Description = "this is description 1"
        };
        await App.SQLiteDb.SaveItemAsync(tick);
        var tickList = await App.SQLiteDb.GetItemsAsync();
        if (tickList != null)
        {
            ticks = new ObservableCollection<Tick>(tickList);
        }
    }

    protected async override void OnAppearing()
    {
        base.OnAppearing();

        //Get All Persons
        var tickList = await App.SQLiteDb.GetItemsAsync();
        if(tickList!=null)
        {
            ticks = new ObservableCollection<Tick>(tickList);
        }          
    }
}

public class Tick
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Titulo { get; set; }
    public string Description { get; set; }
}

推荐阅读