回收器视图(Xamarin Android)

本文关键字:Xamarin Android 视图 | 更新日期: 2023-09-27 18:16:22

我正在用Xamarin编写Android应用程序。

我试着做一个回收者。

这是我的json: http://pastebin.com/rL214a2T

我有这样的类:

 public class Billing
{
    public string first_name { get; set; }
    public string last_name { get; set; }
    public string company { get; set; }
    public string address_1 { get; set; }
    public string address_2 { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string postcode { get; set; }
    public string country { get; set; }
    public string email { get; set; }
    public string phone { get; set; }
}
public class Shipping
{
    public string first_name { get; set; }
    public string last_name { get; set; }
    public string company { get; set; }
    public string address_1 { get; set; }
    public string address_2 { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string postcode { get; set; }
    public string country { get; set; }
}
public class Result
{
    public int id { get; set; }
    public int parent_id { get; set; }
    public string status { get; set; }
    public string order_key { get; set; }
    public int number { get; set; }
    public string currency { get; set; }
    public string version { get; set; }
    public bool prices_include_tax { get; set; }
    public string date_created { get; set; }
    public string date_modified { get; set; }
    public int customer_id { get; set; }
    public string discount_total { get; set; }
    public string discount_tax { get; set; }
    public string shipping_total { get; set; }
    public string shipping_tax { get; set; }
    public string cart_tax { get; set; }
    public string total { get; set; }
    public string total_tax { get; set; }
    //public List<Billing> billing { get; set; }
    public Billing billing { get; set; }
    public Shipping shipping { get; set; }
    public string payment_method { get; set; }
    public string payment_method_title { get; set; }
    public string transaction_id { get; set; }
    public string customer_ip_address { get; set; }
    public string customer_user_agent { get; set; }
    public string created_via { get; set; }
    public string customer_note { get; set; }
    public string date_completed { get; set; }
    public string date_paid { get; set; }
    public string cart_hash { get; set; }
    public List<object> line_items { get; set; }
    public List<object> tax_lines { get; set; }
    public List<object> shipping_lines { get; set; }
    public List<object> fee_lines { get; set; }
    public List<object> coupon_lines { get; set; }
    public List<object> refunds { get; set; }
}
public class RootObject
{
    public List<Result> results { get; set; }
}

我写的类是这样的:

 using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using ModernHttpClient;
using Newtonsoft.Json;
namespace StarWars.Api.Repository
{
    public class MoviesRepository
    {
        public async Task<RootObject> GetAllFilms()
        {
            var httpClient = GetHttpClient();
            var response = await httpClient.GetAsync(ServiceEndPoints.StartWarsApiBaseUri).ConfigureAwait(false);
            if (response.IsSuccessStatusCode)
            {
                var content = response.Content;
                string jsonString = await content.ReadAsStringAsync().ConfigureAwait(false);

                return JsonConvert.DeserializeObject<RootObject>(jsonString);
            }
            return new RootObject();
        }
        private HttpClient GetHttpClient()
        {
            var httpClient = new HttpClient(new NativeMessageHandler())
            {
                BaseAddress = new Uri(ServiceEndPoints.StartWarsApiBaseUri)
            };

            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            return httpClient;
        }
    }
    public class ServiceEndPoints
    {
        public static readonly string StartWarsApiBaseUri = "http://api.simplegames.com.ua/index.php/?wc_orders=processing_orders";
       // public static readonly string GetFilmsUri = "films";
    }
}

但是当我尝试启动应用程序时,出现了这个错误

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'StarWars.Api.Repository.RootObject' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.

我知道我需要设置

我该如何修复它?

使用Resharper我重制代码像这样

 public async Task<List<RootObject>> GetAllFilms()
    {
        var httpClient = GetHttpClient();
        var response = await httpClient.GetAsync(ServiceEndPoints.StartWarsApiBaseUri).ConfigureAwait(false);
        if (response.IsSuccessStatusCode)
        {
            var content = response.Content;
            string jsonString = await content.ReadAsStringAsync().ConfigureAwait(false);

            return JsonConvert.DeserializeObject<List<RootObject>>(jsonString);
        }
        return new List<RootObject>();
    }
    private HttpClient GetHttpClient()
    {
        var httpClient = new HttpClient(new NativeMessageHandler())
        {
            BaseAddress = new Uri(ServiceEndPoints.StartWarsApiBaseUri)
        };

        httpClient.DefaultRequestHeaders.Accept.Clear();
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        return httpClient;
    }
}
public class ServiceEndPoints
{
    public static readonly string StartWarsApiBaseUri = "http://api.simplegames.com.ua/index.php/?wc_orders=processing_orders";
   // public static readonly string GetFilmsUri = "films";
}

}

但我有错误在我的MainActivity在这一行var moviesAdapter = new MovieAdapter(films.results)

这里是错误

错误CS1061"列表"不包含"结果"的定义,并且无法找到接受类型"列表"的第一个参数的扩展方法"结果"(您是否缺少using指令或程序集引用?)

回收器视图(Xamarin Android)

你需要改变你的模型类,如果你不知道应该如何看你的模型类,你可以使用工具,如json2sharp。你不能用你的类来反序列化JSON。使用这些类来代替。

public class Billing
{
    public string first_name { get; set; }
    public string last_name { get; set; }
    public string company { get; set; }
    public string address_1 { get; set; }
    public string address_2 { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string postcode { get; set; }
    public string country { get; set; }
    public string email { get; set; }
    public string phone { get; set; }
}
public class Shipping
{
    public string first_name { get; set; }
    public string last_name { get; set; }
    public string company { get; set; }
    public string address_1 { get; set; }
    public string address_2 { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string postcode { get; set; }
    public string country { get; set; }
}
public class LineItem
{
    public int id { get; set; }
    public string name { get; set; }
    public string sku { get; set; }
    public int product_id { get; set; }
    public int variation_id { get; set; }
    public int quantity { get; set; }
    public string tax_class { get; set; }
    public string price { get; set; }
    public string subtotal { get; set; }
    public string subtotal_tax { get; set; }
    public string total { get; set; }
    public string total_tax { get; set; }
    public List<object> taxes { get; set; }
    public List<object> meta { get; set; }
}
public class ShippingLine
{
    public int id { get; set; }
    public string method_title { get; set; }
    public string method_id { get; set; }
    public string total { get; set; }
    public string total_tax { get; set; }
    public List<object> taxes { get; set; }
}
public class RootObject
{
    public int id { get; set; }
    public int parent_id { get; set; }
    public string status { get; set; }
    public string order_key { get; set; }
    public int number { get; set; }
    public string currency { get; set; }
    public string version { get; set; }
    public bool prices_include_tax { get; set; }
    public string date_created { get; set; }
    public string date_modified { get; set; }
    public int customer_id { get; set; }
    public string discount_total { get; set; }
    public string discount_tax { get; set; }
    public string shipping_total { get; set; }
    public string shipping_tax { get; set; }
    public string cart_tax { get; set; }
    public string total { get; set; }
    public string total_tax { get; set; }
    public Billing billing { get; set; }
    public Shipping shipping { get; set; }
    public string payment_method { get; set; }
    public string payment_method_title { get; set; }
    public string transaction_id { get; set; }
    public string customer_ip_address { get; set; }
    public string customer_user_agent { get; set; }
    public string created_via { get; set; }
    public string customer_note { get; set; }
    public string date_completed { get; set; }
    public string date_paid { get; set; }
    public string cart_hash { get; set; }
    public List<LineItem> line_items { get; set; }
    public List<object> tax_lines { get; set; }
    public List<ShippingLine> shipping_lines { get; set; }
    public List<object> fee_lines { get; set; }
    public List<object> coupon_lines { get; set; }
    public List<object> refunds { get; set; }
}