2017-04-23 3 views
0

Cat Facts API를 사용하여 재미있게 연습하고 있습니다. 내가 겪고있는 문제는 한 번에 하나씩 '고양이 사실'을 표시하는 것이 아닙니다. 그러나 나는 합계 5 개의 사실을 무작위로 표시하려고합니다. 예를 들어 사용자가 버튼을 클릭하면 3 개의 사실을 얻고, 사용자가 버튼을 다시 클릭하면 1 개의 사실이 표시되고 사용자는 3 번째 버튼을 클릭하고 1, 2, 3, 4 또는 5 개의 사실을 얻습니다. 임 하나의 활동/클래스에서 모든 것을 시도. http://catfacts-api.appspot.com/api/facts?number=5은 5 개의 사실을 표시하고 http://catfacts-api.appspot.com/api/facts은 하나를 반환합니다. 이C# webrequest 임의 값을 사용하여 결과 값을 출력하는 Json 값 반환

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

이 정확하게 작동하지 않는 것을 명확하지 않다, 또는 어떤이가 아니라는 것을 일을해야하는데, 내 코드는 지금까지 모습입니다. 게시 한 내용을 다시 읽고 문제가 명확하게 나타나는지 확인하십시오. – Jason

+0

링크를 클릭하면 http://catfacts-api.appspot.com/api/facts?number=5 링크를 클릭하면 5 개의 무작위 정보가 생성됩니다. 지금은 내 현재는 1 번 밖에 보이지 않습니다. 나는 무언가를해야한다고 생각합니다. 무작위 무작위 = 새로운 무작위(); 왜냐하면 나는 임의의 사실을 얻기 위해 imageButton을 클릭 할 수 있기를 원하기 때문에 사실의 무작위 수이기 때문에 최대 5 개의 사실까지 표시됩니다. 나는 이것이 혼란을 없애기를 바란다. –

+0

당신은 "/ api/facts"를 호출합니다 - "사실 수"뒤에 "? number = 5"또는 다른 인수를 포함시키지 마십시오. 여러 팩트를 반환하더라도 updateCats() 메서드는 첫 번째 매개 변수 만 표시합니다. – Jason

답변

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

당신의 제안을 이해합니다. 그러나 여전히 하나의 사실만을 보여줍니다. 응답에 문자열 url에 오류가 있습니다. 사실 (와) 사이에는 대괄호가 없습니다? number = 5. 그래서 내가하려고하는 것은 5의 임의의 숫자로 URL을 추가하는 것입니다. –

+0

사실의 임의 번호를 요청한 다음 요청 된 사실 모두를 표시 하시겠습니까? 그렇다면 내 편집 된 답변을 참조하십시오. – Jason

+0

버튼을 클릭 할 때 이러한 결과 옵션을 임의로 선택하려고 시도합니다. {http://catfacts-api.appspot.com/api/facts?number=1 또는 http://catfacts-api.appspot.com/api/facts? number = 2 또는 http://catfacts-api.appspot.com/api/facts?number=3 OR 4/5} 그리고 {ndx}에 대해서도 같은 생각을하고 임의 선택. 그것은 한 번에 하나 이상을 표시하는 것 같지 않습니다. 나는 그것이 문자열 인 url과 관련이있을 수 있다고 생각한다. 난수의 숫자를 문자열로 변환해야만 ndx의 위치에서 작동 할 수 있을까? –

관련 문제