我是为UWP平台开发的新手。

我为Windows 10移动版编写UWP应用。

我这样下载

public async Task<string> FetchAsync(string url)
{
    string jsonString;

    using (var httpClient = new System.Net.Http.HttpClient())
    {
        var stream = await httpClient.GetStreamAsync(url);
        StreamReader reader = new StreamReader(stream);
        jsonString = reader.ReadToEnd();
    }

    return jsonString;
}


像这样写文件:

  string url = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=82";
        var json = await FetchAsync(url);
        using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
        {
            json.Save(fs);
        }

        Debug.WriteLine(json);


整个代码:

  using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using System.Xml;
using Windows.ApplicationModel.Calls;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace  Murakami
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public  sealed  partial class   MainPage : Page
    {
        public MainPage()
        {




            string url = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=82";
            var json = await FetchAsync(url);
            using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
            {
                json.Save(fs);
            }

            Debug.WriteLine(json);


            this.InitializeComponent();
            XmlDocument doc = new XmlDocument();
            XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Order"));
            el.SetAttribute("CallConfirm", "1");
            el.SetAttribute("PayMethod", "");
            el.SetAttribute("QtyPerson", "");
            el.SetAttribute("Type", "1");
            el.SetAttribute("PayStateID", "0");
            el.SetAttribute("Remark", "{StreetName} , ..");
            el.SetAttribute("RemarkMoney", "0");
            el.SetAttribute("TimePlan", "");
            el.SetAttribute("Brand", "1");
            el.SetAttribute("DiscountPercent", "0");
            el.SetAttribute("BonusAmount", "0");
            el.SetAttribute("Department", "");

            XmlElement el2 = (XmlElement)el.AppendChild(doc.CreateElement("Customer"));

            el2.SetAttribute("Login", "");
            el2.SetAttribute("FIO", "{FIO}");

            XmlElement el3 = (XmlElement)el.AppendChild(doc.CreateElement("Address"));

            el3.SetAttribute("CityName", "");
            el3.SetAttribute("StationName", "");
            el3.SetAttribute("StreetName", "{StreetName}");
            el3.SetAttribute("House", "{HouseName}");
            el3.SetAttribute("Corpus", "");
            el3.SetAttribute("Building", "");
            el3.SetAttribute("Flat", "{FlatName}");
            el3.SetAttribute("Porch", "");
            el3.SetAttribute("Floor", "");
            el3.SetAttribute("DoorCode", "");

            XmlElement el4 = (XmlElement)el.AppendChild(doc.CreateElement("Phone"));

            el4.SetAttribute("Code", "{Code}");
            el4.SetAttribute("Number", "{Phone}");

            XmlElement el5 = (XmlElement)el.AppendChild(doc.CreateElement("Products"));




              using (FileStream fs = new FileStream("test.xml", FileMode.Create))
              {
                  doc.Save(fs);
              }

              Debug.WriteLine(doc);







        }

       async private void TwitterButton_Click(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://twitter.com/murakami_rest"));

        }

       async private void FacebookButton_Click(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://www.facebook.com/MURAKAMI.rest"));
        }

       async  private void button9_Click_1(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://vk.com/murakami_restaurant_delivery"));
        }

        async private void InstagramButton_Click(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://instagram.com/murakami_in_ua/"));

        }

        private void PhoneCallButton_Click(object sender, RoutedEventArgs e)
        {
            PhoneCallManager.ShowPhoneCallUI("+380442308888","");
        }

        private void ProMurakamiButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(ProMurakami));

        }

        private void BludoDnyaButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(BludoDnya));
        }

        private void CartButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(Cart2));
        }


        /* private void textBlock_SelectionChanged(object sender, RoutedEventArgs e)
         {
             PhoneCallManager.ShowPhoneCallUI("0213132131", "my name");
         }*/
    }




   public async Task<string> FetchAsync(string url)
    {
        string jsonString;

        using (var httpClient = new System.Net.Http.HttpClient())
        {
            var stream = await httpClient.GetStreamAsync(url);
            StreamReader reader = new StreamReader(stream);
            jsonString = reader.ReadToEnd();
        }

        return jsonString;
    }
}


我有这些错误:

 Error  CS0116  A namespace cannot directly contain members such as fields or methods



 Error  CS0103  The name 'FetchAsync' does not exist in the current context Murakami



  Error CS4033  The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.


我的代码错误在哪里?

非常感谢您的帮助!

最佳答案

我看过你的代码。

首先

您在哪里:


/* private void textBlock_SelectionChanged(object sender, RoutedEventArgs e)
     {
         PhoneCallManager.ShowPhoneCallUI("0213132131", "my name");
     }*/
} // <-- This brace is closing off the class too early.



最后一个括号是关闭类,因此FetchAsync(url)方法正试图声明为自己的类。

从此代码后删除有问题的},并在底部放置一个。像这样:

            /* private void textBlock_SelectionChanged(object sender, RoutedEventArgs e)
         {
             PhoneCallManager.ShowPhoneCallUI("0213132131", "my name");
         }*/


        public async Task<string> FetchAsync(string url)
        {
            string jsonString;

            using (var httpClient = new System.Net.Http.HttpClient())
            {
                var stream = await httpClient.GetStreamAsync(url);
                StreamReader reader = new StreamReader(stream);
                jsonString = reader.ReadToEnd();
            }

            return jsonString;
        }
    }
} // <-- Add this one, right here


这是导致您的


  错误CS0116命名空间不能直接包含诸如字段或方法之类的成员
  
  错误CS0103在当前上下文村上,名称'FetchAsync'不存在



其次

您的await FetchAsync(url);调用位于类的构造函数中,该类的构造函数不能标记为async

您需要创建一个新方法,将您的


var json = await FetchAsync(url);
            using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
            {
                json.Save(fs);
            }

            Debug.WriteLine(json);



在其自己的async方法中,然后从构造函数中调用它。

像这样:

    private async void NewMethod(string url)
    {
        var json = await FetchAsync(url);
        using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
        {
            // Do stuff in here to write to your file...
        }

        Debug.WriteLine(json);
    }


访问https://msdn.microsoft.com/en-us/windows/uwp/files/quickstart-reading-and-writing-files,了解有关在UWP中将文本写入文件的更多信息。

然后从您的ctor调用它...

public MainPage() {
        string url = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=82";
        NewMethod(url); // Now call your newly-created method.

        ... // Do your other stuff as before.
}


这就是导致您


  错误CS4033“等待”运算符只能在异步方法中使用。考虑使用“异步”修饰符标记此方法,并将其返回类型更改为“任务”。


希望这可以帮助!让我知道您是否还有其他需要。

关于c# - 在UWP(C#)中下载JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37087387/

10-16 09:04