2017-04-23 3 views
0

Je travaille sur un petit exercice pour m'amuser en utilisant l'api Cat Facts. Le problème que je rencontre, n'est pas en affichant un «fait de chat» au hasard un à la fois. Mais j'essaie d'afficher une quantité aléatoire de faits jusqu'à cinq au total. Par exemple, l'utilisateur clique sur le bouton obtient 3 faits, l'utilisateur clique à nouveau sur le bouton et obtient 1 fait, l'utilisateur clique sur le bouton une troisième fois et obtient 1, 2, 3, 4 ou 5 faits. Im essayant de faire tout dans une activité/classe. http://catfacts-api.appspot.com/api/facts?number=5 affichera 5 faits et http://catfacts-api.appspot.com/api/facts renverra un. Voici comment mon code ressemble à ce jour,C# webrequest retournant la valeur de Json, produisant la quantité des résultats en utilisant Random

public class MainActivity : Activity 
{ 
private ImageButton _mrWhiskersButton; 
private TextView _catFactsTextView; 
protected override void OnCreate(Bundle bundle) 
{ 
base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 

     _mrWhiskersButton = FindViewById<ImageButton>(Resource.Id.imageCatButton); 
     _catFactsTextView = FindViewById<TextView>(Resource.Id.catFactsText); 

     _mrWhiskersButton.Click += async delegate 
     { 


      string url = "Http://catfacts-api.appspot.com/api/facts"; 
      JsonValue json = await FetchInfoAsync(url); 
      updateCats(json); 
     }; 

    } 
    public async Task<JsonValue> FetchInfoAsync(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url)); 
     request.ContentType = "application/json"; 
     request.Method = "GET"; 

     using (WebResponse response = await request.GetResponseAsync()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       JsonValue jsonDoc = await Task.Run(() => JsonValue.Load(stream)); 
       Console.Out.WriteLine("Response: {0}", jsonDoc.ToString()); 
       return jsonDoc; 
      } 
     } 
    } 

    private void updateCats(JsonValue json) 
    { 

     _catFactsTextView.Text = json["facts"][0]; 
    } 

} 
} 
+0

Il est pas clair ce qui ne fonctionne pas exactement, ou ce qu'il est supposé faire que ce n'est pas. Veuillez relire ce que vous avez posté pour être sûr que vous énoncez clairement le problème. – Jason

+0

donc si vous cliquez sur le lien http://catfacts-api.appspot.com/api/facts?number=5 vous verrez qu'il génère 5 faits aléatoires. maintenant le mien affiche actuellement seulement 1. Je crois que je dois faire quelque chose comme Random random = new Random(); Parce que je veux être capable de cliquer sur l'imageButton pour obtenir un fait aléatoire, et cela étant aussi un nombre aléatoire de faits, jusqu'à un maximum de 5 faits affichés. J'espère que cela clarifie la confusion. –

+0

vous appelez "/ api/faits" - vous n'incluez pas "? Number = 5" ou tout autre argument après "faits". Même s'il retournait plusieurs faits, votre méthode updateCats() n'affiche que la première. – Jason

Répondre

0
public class MainActivity : Activity 
{ 
    private ImageButton _mrWhiskersButton; 
    private TextView _catFactsTextView; 
    private System.Random rand; 

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

    rand = new System.Random(); 

    // omitted code... 

    _mrWhiskersButton.Click += async delegate 
    { 
     // get next random int between 1 and 5 
     int ndx = rand.Next(1,5); 
     string url = $"Http://catfacts-api.appspot.com/api/facts?number={ndx}"; 
     JsonValue json = await FetchInfoAsync(url); 
     updateCats(json); 
    }; 

} 
    private void updateCats(JsonValue json) 
    { 
     foreach (var fact in json["facts"]) { 
     _catFactsTextView.Text += fact + "\n";   
     } 

    } 
+0

Je comprends ce que vous suggérez. Cependant, il ne montre qu'un seul fait. Il y a une erreur int dans l'URL de la chaîne dans votre réponse. Il n'y a pas de crochet entre les faits (et)? Number = 5. Donc, ce que je tente de faire est d'ajouter l'URL avec un nombre aléatoire sur 5. –

+0

voulez-vous demander un nombre aléatoire de faits et ensuite afficher TOUS les faits demandés? Si oui, voir ma réponse éditée. – Jason

+0

en essayant d'obtenir une sélection aléatoire de l'une de ces options de résultat quand un bouton est cliqué {http://catfacts-api.appspot.com/api/facts?number=1 OU http://catfacts-api.appspot.com/api/facts? number = 2 OU http://catfacts-api.appspot.com/api/facts?number=3 OR 4/5} et je pensais la même chose à propos de {ndx} et de changer le nombre basé sur le sélection aléatoire. Il ne semble pas en afficher plus d'un à la fois. Je crois que cela pourrait avoir à faire avec l'URL étant une chaîne, je devrais convertir le nombre aléatoire en une chaîne pour qu'il fonctionne dans la position de ndx? –