Показать сообщение пользователю в Xamarin API - PullRequest
0 голосов
/ 11 сентября 2018

У вас есть API (НЕ модифицируемый), который вы хотите использовать, этот API получает некоторые параметры, которые, если они НЕ проверены должным образом, API выдает сообщение об ошибке, именно это сообщение я хочу захватить,например, здесь на рисунке я передаю ошибочный пароль и хочу показать это сообщение пользователю.

Postman

Для этого создайте класс с именем Response, который отвечает за управление различными вызовами к API

Response.cs:

 public class Response
    {
        public bool IsSuccess { get; set; }

        public string Message { get; set; }

        public object Result { get; set; }

        [JsonProperty(PropertyName = "userMessage")]
        public string userMessage { get; set; }
    }

в моем LoginViewModel Я вызываю метод, который использует этот API, который реализован в классеназывается ApiService.cs:

ApiService.cs:

  public async Task<Response> GetLogin(
            string urlAPILogin, string KeyLogin, string Rut, string Password)
            {
                try
                {
                    var client = new HttpClient();
                    client.BaseAddress = new Uri(urlAPILogin);
                    string url = string.Format("login/index/?k=" + KeyLogin + "&rut=" + Rut + "&password=" + Password);
                    var response = await client.GetAsync(url);

                    var result = await response.Content.ReadAsStringAsync();
                    var model = JsonConvert.DeserializeObject<Response>(result);

                    if (!response.IsSuccessStatusCode)
                    {
                        return new Response
                        {
                            IsSuccess = false,
                            Message = response.StatusCode.ToString(),
                            Result = model,
                        };
                    }

                    return new Response
                    {
                        IsSuccess = true,
                        Message = "Ok",
                        Result = model,
                    };

                }
                catch (Exception ex)
                {
                    return new Response
                    {
                        IsSuccess = false,
                        Message = ex.Message,
                    };
                }
            }

Теперь он находится в моей ViewModel (LoginViewModel), где я хочу нарисовать это сообщение!и я пытаюсь сделать это следующим образом:

  var response = await apiService.GetLogin(
                urlAPILogin,
                KeyLogin,
                Rut,
                Password);


            if (string.IsNullOrEmpty(response.userMessage))
            {                
                IsRunning = false;
                IsEnabled = true;
                await dialogService.ShowMessage(
                    "Error",
                    response.userMessage);
                Password = null;
                return;
            }

, но я не получаю ожидаемого ответа (он пишет мне пустое сообщение !!!)

screenshoot

что это за объект, если он приносит сообщение !!

VS2017

какая-нибудь помощь для меня?что я делаю не так?

1 Ответ

0 голосов
/ 11 сентября 2018

В вашем методе LoginViewModel, где вы ожидаете ответа, переменная с userMessage, которую вы хотите, расположена на уровень глубже.

В настоящее время:

// userMessage is null in your *locals* section
await dialogService.ShowMessage("Error", response.userMessage);

Должно быть:

// This is where the wanted value is: userMessage is the desired message
await dialogService.ShowMessage("Error", response.Result.userMessage);

Вам нужно будет разыграть response.Result в качестве ответа, поскольку ваша переменная Result является объектом , но это должно решить вашу проблему.

Должно быть (приведено):

// This is where the wanted value is: userMessage is the desired message
await dialogService.ShowMessage("Error", (response.Result as Response)?.userMessage);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...