2017-05-02 2 views
0

Hallo Leute Ich habe eine App, die ich versuche, eine JSON-Array-Antwort zu bekommen und es in eine TextView, aber es hat 5 Counts und ich weiß es nicht wie eine zu verwenden, für jedes Feld des JsonArray hier zu lesen ist der Code:Wie liest man JSON Object Array mit Xamarin Android Newtonsoft.Json

using System; 
using Android.App; 
using Android.Widget; 
using Android.OS; 
using RestSharp; 
using Newtonsoft.Json; 
using Android.Util; 
using App4.Resources; 
using Newtonsoft.Json.Linq; 
using Org.Json; 
using System.Net; 
using System.IO; 
using System.Collections.Generic; 

namespace App4 
{ 
[Activity(Label = "App4", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    EditText edtcpf; 
    Button btnConsumer; 
    TextView txtcpf; 
    RestRequest cpf { get; set; } 
    public RestClient consumer { get; set; } 
    IRestResponse mensagemConsumer; 
    TextView txtsobrenome; 
    RestClient orderId { get; set; } 
    RestRequest requestorderId { get; set; } 
    IRestResponse answerorder { get; set; } 
    TextView txtnome; 
    TextView txtorder; 
    TextView txtmensagem; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 
     btnConsumer = FindViewById<Button>(Resource.Id.btnConsumer); 
     edtcpf = FindViewById<EditText>(Resource.Id.edtcpf); 
     txtcpf = FindViewById<TextView>(Resource.Id.txtcpf); 
     txtsobrenome = FindViewById<TextView>(Resource.Id.txtresposta); 
     txtnome = FindViewById<TextView>(Resource.Id.txtNome); 
     txtorder = FindViewById<TextView>(Resource.Id.txtorder); 
     txtmensagem = FindViewById<TextView>(Resource.Id.txtMensagem); 
     btnConsumer.Click += BtnConsumer_Click; 

    } 

    private void BtnConsumer_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      // API Consumer CPF 

      consumer = new RestClient("https://qa.api-latam.whirlpool.com/v1.0/consumers"); 
      cpf = new RestRequest("/" + edtcpf.Text, Method.GET); 
      cpf.AddHeader("Content-Type", "application/json; charset=utf-8"); 
      cpf.AddHeader("Authorization", "Bearer 70197e6c-d81b-384c-bb32-d69e8c10b101"); 
      mensagemConsumer = consumer.Execute(cpf); 
      Pessoa pessoa = JsonConvert.DeserializeObject<Pessoa>(mensagemConsumer.Content); 
      txtnome.Text = "Nome: " +pessoa.firstName; 
      txtsobrenome.Text = "Sobrenome: "+ pessoa.lastName; 

      // API Consumer Appliances 
      orderId = new RestClient("https://qa.api-latam.whirlpool.com/v1.0/consumers/"); 
      requestorderId = new RestRequest("/"+ edtcpf.Text+ "/service-orders", Method.GET); 
      requestorderId.AddHeader("Content-Type", "application/json; charset=utf-8"); 
      requestorderId.AddHeader("Authorization", "Bearer 70197e6c-d81b-384c-bb32-d69e8c10b101"); 
      answerorder = orderId.Execute(requestorderId); 
      var requestToken = JsonConvert.DeserializeObject<RootObject>(answerorder.Content); 
      var parse = JObject.Parse(answerorder.Content); 
      var QtdeItens = parse.Count; 
      var end = ""; 
      /*foreach (Dictionary<string, Order2> kvp in Order) 
      { 
       txtorder.Text = "Id: " + kvp.Value.orderId; 

      }*/ 


     } 
     catch (Exception) 
     { 

      throw; 
     } 




    } 


} 

}

ich eine Klasse auf http://json2csharp.com/ erstellt und hier ist die Klasse, die ich verwende, die Werte zu erhalten. Die JSON Antwort depoends auf der ID-Nummer, die Person gesetzt, so dass es jedes Mal, wenn ich diesen Test die ID verwendet haben diferent werden kann 181.299.668-32

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Newtonsoft.Json; 

public class Order2 
{ 
public object orderId { get; set; } 
public string orderStatusCode { get; set; } 
public string orderStatusDescription { get; set; } 
public int serviceProviderId { get; set; } 
public string orderOpeningDate { get; set; } 
public string orderSchedulingDate { get; set; } 
public string orderSchedulingPeriod { get; set; } 
public object orderSettlementDate { get; set; } 
public object orderCancellationDate { get; set; } 
} 

public class Order 
{ 
public Order2 order { get; set; } 
} 

    public class RootObject 
    { 
    public List<Order> orders { get; set; } 
    } 

So ist die Antwort, dass die json zurückkehrt ist: {"orders": [{"order": {"orderId": 7004093603, "orderStatusCode": "CANC", "orderStatusDescription": "Cancelado", "serviceProviderId": 3649, "orderOpeningDate": "2015-07 -07 "," orderSchedulingDate ":" 2015-07-18 "," orderSchedulingPeriod ":" M "," orderSettlementDate ": null," orderCancellationDate ": null}}, {" order ": {" orderId ": 7004153791, "orderStatusCode": "AGEN", "orderStatusDescription": "Agendado", "serviceProviderId": 3524, "orderOpeningDate": "2016-08-31", "orderSchedulingDate": "2016-09-01", "orderSchedulin gPeriod ":" M "," orderSettlementDate ": null," orderCancellationDate ": null}}, {" order ": {" orderId ": 7004156972," orderStatusCode ":" ABRT "," orderStatusDescription ":" Aberto "," serviceProviderId ": 30820," orderOpeningDate ":" 2017-04-13 "," orderSchedulingDate ": null," orderSchedulingPeriod ": null," orderSettlementDate ": null," orderCancellationDate ": null}}, {" order ": {" orderId ": 7002178478," orderStatusCode ":" CANC "," orderStatusDescription ":" Cancelado "," serviceProviderId ": 3555," orderOpeningDate ":" 2014-02-22 "," orderSchedulingDate ":" 2014-02-24 " "orderPeriod": "M", "orderSettlementDate": null, "orderCancellationDate": null}}, {"order": {"orderId": 7002118317, "orderStatusCode": "CANC", "orderStatusDescription": "Cancelado" "serviceProviderId": 3555, "orderOpeningDate": "2014-02-10", "orderSchedulingDate": "2014-02-15", "orderSchedulingPeriod": "M", "orderSettlementDate": null, "orderCancellationDate": null }}}}

Und JsonViewer sagte, dass es 5 zählt hat, so wie kann ich ein für oder foreach tun, weil die orderId, Orderstatus Code, orderStatusDescription und orderOpeningDate lesen dependiing auf der Id es von 0 bis 10 zählt hat

[ EDIT]

Mit der Methode:

foreach (var order in requestToken.orders) 
      { 

        object vader = order.order.orderId; 
        string darth = Convert.ToString(vader); 
        txtorder.Text = darth; 
        txtorder.Text = order.order.orderStatusDescription; 
        txtorder.Text = order.order.orderStatusCode.; 
       } 

Er kehrte ein orderId :). Mein Zweifel ist: es ruft die orderId der Zählung 0 automatisch an Wie kann ich die anderen orderIds anrufen? Ist es so?

   foreach (var order in requestToken.orders) 
      { 
       //for (var i = 0; i < requestToken.orders.Count; i++) 
       //{ 
        object vader = order.order.orderId[1], [2], etc; 
        string darth = Convert.ToString(vader); 
        txtorder.Text = darth; 
        txtorder.Text = order.order.orderStatusDescription; 
        txtorder.Text = order.order.orderStatusCode.; 
       //} 

Danke Jungs für die Hilfe

+0

requestToken sollte alle Informationen enthalten, die Sie benötigt. Verwenden Sie einfach foreach (var Ordnung in requestToken.orders) {// tun, was Sie wollen } –

Antwort

0

Sie benötigen JSON-String

var data = JsonConvert.DeserializeObject<RootObject>(jsonString); 

Dann Schleife foreach Deserialize laufen

foreach(var orders in data) 
{ 
    var Id = orders.order.orderId; 
    ///and so on... 
} 
+0

Verwendung der Methode: foreach (var Reihenfolge in requestToken.orders) { Objekt vader = order.order.orderId; Zeichenfolge darth = Convert.ToString (vader); txtorder.Text = darth; txtorder.Text = order.order.orderStatusDescription; txtorder.Text = order.order.orderStatusCode .; } Es ergab eine orderId :). Mein Zweifel ist: es ruft die OrderId der Zählung 0 automatisch auf, wie kann ich die anderen orderIds aufrufen? Vielen Dank –

0

Sie die Werte wie folgt zugreifen können:

var test = JsonConvert.DeserializeObject<Rootobject>(json); 
var orderIds = new List<long>(); 
foreach (var order in test.orders) 
{ 
    var vader = order.order.orderId; 
    orderIds.Add(vader); 
} 

Beachten Sie, dass die OrderIDs an die vader Variable in jeder Iteration der Schleife überschrieben werden. Wenn Sie sie behalten möchten, benötigen Sie eine Sammlung (in meinem Beispiel eine Liste mit dem Namen) und in jeder Iteration, die Sie dieser Sammlung hinzufügen. Schließlich werden alle orderId s in sein.

+0

Mit der Methode: foreach (var Reihenfolge in requestToken.orders) { Objekt vader = order.order.orderId ; Zeichenfolge darth = Convert.ToString (vader); txtorder.Text = darth; txtorder.Text = order.order.orderStatusDescription; txtorder.Text = order.order.orderStatusCode .; } Es ergab eine orderId :). Mein Zweifel ist: es ruft die OrderId der Zählung 0 automatisch auf, wie kann ich die anderen orderIds aufrufen? Danke –

+0

Möchten Sie alle orderIds extrahieren und sie irgendwo, in einer Liste zum Beispiel? – Mahdi

+0

Ja, ich möchte sie extrahieren und zeigen sie in der App –

Verwandte Themen