0

我正在开发一个 Windows Phone 8 应用程序。我在附加到我的 JSON 文件时遇到问题。
如果我保持应用程序打开,它工作正常,但是一旦我关闭它并返回它,它就会从文件的开头重新开始写入。

相关代码:

private async void btnSave_Click(object sender, RoutedEventArgs e)
{
    // Create a entry and intialize some values from textbox...
    GasInfoEntries _entry = null;
    _entry = new GasInfoEntries();
    _entry.Gallons = TxtBoxGas.Text;
    _entry.Price = TxtBoxPrice.Text;
    _GasList.Add(_entry);

    //TxtBlockPricePerGallon.Text = (double.Parse(TxtBoxGas.Text) / double.Parse(TxtBoxPrice.Text)).ToString();

    // Serialize our Product class into a string    
    string jsonContents = JsonConvert.SerializeObject(_GasList);

    // Get the app data folder and create or open the file we are storing the JSON in.            
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    StorageFile textfile = await localFolder.CreateFileAsync("gasinfo.json", CreationCollisionOption.OpenIfExists); //if get await operator error add async to class (btnsave)

    //open file
    using (IRandomAccessStream textstream = await textfile.OpenAsync(FileAccessMode.ReadWrite))
    {
        //write JSON string
        using (DataWriter textwriter = new DataWriter(textstream))
        //using (DataWriter textwriter = new DataWriter(textstream))
        {
            textwriter.WriteString(jsonContents);
            await textwriter.StoreAsync(); //writes buffer to store
        }
    }
}

private async void btnShow_Click(object sender, RoutedEventArgs e)
{
    StorageFolder localfolder = ApplicationData.Current.LocalFolder;
    try
    {
        // Getting JSON from file if it exists, or file not found exception if it does not
        StorageFile textfile = await localfolder.GetFileAsync("gasinfo.json");

        using (IRandomAccessStream textstream = await textfile.OpenReadAsync())
        {
            //read text stream
            using (DataReader textreader = new DataReader(textstream))
            {
                //get size ...not sure what for  think check the file size (lenght) then based on next 2 commands waits until its all read
                uint textlength = (uint)textstream.Size;
                await textreader.LoadAsync(textlength);
                //read it
                string jsonContents = textreader.ReadString(textlength);
                // deserialize back to gas info
                _GasList = JsonConvert.DeserializeObject<List<GasInfoEntries>>(jsonContents) as List<GasInfoEntries>;

                displayGasInfoEntries();

            }
        }
    }
    catch
    {
        txtShow.Text = "something went wrong";
    }      
}

private void displayGasInfoEntries()
{
    txtShow.Text = "";
    StringBuilder GasString = new StringBuilder();
    foreach (GasInfoEntries _entry in _GasList)
    {
        GasString.AppendFormat("Gallons: {0} \r\n Price: ${1} \r\n", _entry.Gallons, _entry.Price); // i think /r/n means Return and New line...{0} and {1} calls "variables" in json file
    }
    txtShow.Text = GasString.ToString();
}

谢谢

4

1 回答 1

1

btnShow_Click每次启动应用程序时都会调用吗?因为否则_GasList将是空的;如果您现在调用btnSave_Click所有先前所做的更改将丢失。

因此,请确保在将项目添加到_GasList.

于 2014-04-23T06:34:11.040 回答