Sqlite与windows phone 8应用程序开发

本文关键字:应用程序开发 phone windows Sqlite | 更新日期: 2023-09-27 18:28:19

我正在使用sqlite数据库开发一个windows phone应用程序。我已经将所有值存储在history.xaml.cs中,但当我运行应用程序时,它在调试器上以错误告终。break为">SmartParking.DLL!SmartParking.App.RootFrame_NavigationFailed(对象发送器,System.Windows.Navigation.NavigationFailedEventArgs e)Line 133 C#"

以下是我正在处理的所有3个类,用于将值存储在数据库中并在history.xaml 中输出

 <Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <!--TitlePanel contains the name of the application and page title-->
    <StackPanel Grid.Row="0" Margin="12,17,0,28">
        <TextBlock Text="Smart Parking" Style="{StaticResource PhoneTextNormalStyle}"/>
        <TextBlock Text="History" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>
    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ListBox x:Name="ListData">
            <ListBox.ItemTemplate>
                <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                            <TextBlock x:Name=  "DateTxt"  Text="{Binding Date}"   TextWrapping="Wrap" />
                            <TextBlock x:Name=  "TimeTxt"  Text="{Binding Time}"  TextWrapping="Wrap" />
                            <TextBlock x:Name=  "ZoneTxt"  Text="{Binding Zone}"  TextWrapping="Wrap"/>
                            <TextBlock x:Name=  "FloorTxt" Text="{Binding Floor}" TextWrapping="Wrap"/>
                            <TextBlock x:Name=  "LatTxt"   Text="{Binding location_latitude}" TextWrapping="Wrap"  />
                            <TextBlock x:Name=  "LongTxt"  Text="{Binding location_longitude}" TextWrapping="Wrap" />
                        </StackPanel>
                 </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox> 
    </Grid>
</Grid>

下面是执行所有主要功能的dbhelper

public class DbHelper
{
    SQLiteConnection dbConn;
    public async Task<bool> onCreate(string DB_PATH)
    {
        try
        {
            if (!CheckFileExists(DB_PATH).Result)
            {
                using (dbConn = new SQLiteConnection(DB_PATH))
                {
                    dbConn.CreateTable<historyTableSQlite>();
                }
            }
            return true;
        }
        catch
        {
            return false;
        }
    }

    private async Task<bool> CheckFileExists(string fileName)
    {
        try
        {
            var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
            return true;
        }
        catch
        {
            return false;
        }
    }
    //retrieve all list from the database
    public ObservableCollection<historyTableSQlite> ReadHistory()
    {
        using (var dbConn = new SQLiteConnection(App.DB_PATH))
        {
            List<historyTableSQlite> myCollection = dbConn.Table<historyTableSQlite>().ToList<historyTableSQlite>();
            ObservableCollection<historyTableSQlite> HistoryList = new ObservableCollection<historyTableSQlite>(myCollection);
            return HistoryList;
        }
    }
    // Insert the new info in the histrorytablesqlite table. 
    public void Insert(historyTableSQlite newcontact)
    {
        using (var dbConn = new SQLiteConnection(App.DB_PATH))
        {
            dbConn.RunInTransaction(() =>
            {
                dbConn.Insert(newcontact);
            });
        }
    }

}    

这是历史.xaml.cs代码文件

 public partial class History : PhoneApplicationPage
{


    // string dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
    ObservableCollection<historyTableSQlite> DB_HistoryList = new ObservableCollection<historyTableSQlite>();
    public History()
    {
        InitializeComponent();
        AddInfo();
        ReadHistoryList_Loaded();
    }

    public void ReadHistoryList_Loaded()
    {
        ReadAllContactsList dbhistory = new ReadAllContactsList();
        DB_HistoryList = dbhistory.GetAllHistory();//Get all DB contacts
        ListData.ItemsSource = DB_HistoryList.OrderByDescending(i => i.Id).ToList();//Latest contact ID can Display first
    }

    public void AddInfo()
    {
    //   ListData.Items.Add(new historyTableSQlite{
    //   Date = DateTime.Now.ToShortDateString(),
    //   Time = DateTime.Now.ToShortTimeString(),
    //   Zone = "PST",
    //   Floor = "10th Floor",
    //  latitude = 35.45112,
    //  longtitude = -115.42622
    //});
        DbHelper Db_helper = new DbHelper();
        Db_helper.Insert((new historyTableSQlite {
            Date = DateTime.Now.ToShortDateString(),
             Time = DateTime.Now.ToShortTimeString(),
             Zone = "PST",
              Floor = "10th Floor",
             latitude = 35.45112,
            longtitude = -115.42622
        }));
    }

}最后一个是初始化所有值的类

ublic class historyTableSQlite : INotifyPropertyChanged
{
    [SQLite.PrimaryKey, SQLite.AutoIncrement]
    public int Id { get; set; }
    private int idvalue;
    private string dateValue = string.Empty;
    public string Date {
        get { return this.dateValue; }
        set
        {
            if (value != this.dateValue)
            {
                this.dateValue = value;
                NotifyPropertyChanged("Date");
            }
        }
    }

    private string timeValue = string.Empty;
    public string Time
    {
        get { return this.timeValue; }
        set
        {
            if (value != this.timeValue)
            {
                this.timeValue = value;
                NotifyPropertyChanged("Time");
            }
        }
    }
    private string floorValue = string.Empty;
    public string Floor
    {
        get { return this.floorValue; }
        set
        {
            if (value != this.floorValue)
            {
                this.floorValue = value;
                NotifyPropertyChanged("Floor");
            }
        }
    }
    public string zoneValue;
    public string Zone
    {
        get { return this.zoneValue; }
        set
        {
            if (value != this.zoneValue)
            {
                this.zoneValue = value;
                NotifyPropertyChanged("Zone");
            }
        }
    }
    private double latValue;
    public double latitude
    {
        get { return latValue; }
        set
        {
            if (value != this.latValue)
            {
                this.latValue = value;
                NotifyPropertyChanged("Latitude");
            }
        }
    }
    private double lonValue;
    public double longtitude
    {
        get { return this.lonValue; }
        set
        {
            if (value != this.lonValue)
            {
                this.lonValue = value;
                NotifyPropertyChanged("Longitude");
            }
        }
    }
   // public string isMarkPoint { get; set; }
    public historyTableSQlite()
    {
    }
    public historyTableSQlite(string date,string time,string floor,string zone,double lat,double lng)
    {
        Date = date;
        Time = time;
        Floor = floor;
        Zone = zone;
        latitude = lat;
        longtitude = lng;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

}

Sqlite与windows phone 8应用程序开发

从History构造函数中删除AddInfo()和ReadHistoryList_Loaded(),并像这样重写OnNavigatedTo()。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
                AddInfo();
                ReadHistoryList_Loaded();
    }

如果是这样,页面构造函数需要几百毫秒以上的时间来创建页面窗口,则会认为出现了问题。出于这个原因,最好不要在构造函数中放入任何内容。