Как исправить ошибку, когда только некоторые данные отображаются с помощью веб-API на Android Xamarin - PullRequest
0 голосов
/ 26 апреля 2019

Я создал персональную информационную страницу для отображения всех данных в соответствии с указанным именем пользователя. К сожалению, текст редактирования не отображал все данные с SQL Server. Он показывает только 2/8 данных. Я использую веб-API для извлечения данных, и данные хранятся в SQL Server. Можете ли вы помочь мне решить эту проблему, пожалуйста !!

Я получил этот код с веб-сайта и следую шаг за шагом в соответствии с веб-сайтом. Я пытался использовать веб-сервисы, это не сработало.

VehicleRecord.cs

public class VehicleRecord
    {
        public string clFullName{ get; set; }
        public string clGender{ get; set; }
        public string clICNo { get; set; }
        public string clAddress { get; set; }
        public string clPhoneNo { get; set; }
        public string clEmail { get; set; }
        public string clUsername { get; set; }
        public string clPwd { get; set; }
        public string clVehicPlateNo { get; set; }
        public string clVehicModel { get; set; }
        public string clVehicCol { get; set; }
        public string clPaymentMethod { get; set; }

        public VehicleRecord()
        {
            this.clFullName = "";
            this.clGender = "";
            this.clICNo = "";
            this.clAddress = "";
            this.clPhoneNo = "";
            this.clEmail = "";
            this.clUsername = "";
            this.clPwd = "";
            this.clVehicPlateNo = "";
            this.clVehicModel = "";
            this.clVehicCol = "";
            this.clPaymentMethod = "";
        }
    }

Service.cs

public class Service
    {
        public static async Task<dynamic> getServiceData(string queryString)
        {
            dynamic acc = null;
            HttpClient client = new HttpClient();

            var response = await client.GetAsync(queryString);

            if(response != null)
            {
                string json = response.Content.ReadAsStringAsync().Result;
                acc = JsonConvert.DeserializeObject(json);
            }

            return acc;
        }
    }

Acc.cs

 public class Acc
    {
        public static async Task<VehicleRecord> GetAcc(string username)
        {
            string queryString = "http://xxx.xxx.x.xxx/PMSAPI1/api/users/" + username;
            dynamic results = await Service.getServiceData(queryString).ConfigureAwait(false);

            if(results != null)
            {
                VehicleRecord vehicleRecord = new VehicleRecord();
                vehicleRecord.clFullName = (string)results["clFullName"];
                vehicleRecord.clGender = (string)results["clGender"];
                vehicleRecord.clICNo = (string)results["clICNo"];
                vehicleRecord.clAddress = (string)results["clAddress"];
                vehicleRecord.clPhoneNo = (string)results["clPhoneNo"];
                vehicleRecord.clEmail = (string)results["clEmail"];
                vehicleRecord.clPwd = (string)results["clPwd"];
                vehicleRecord.clVehicPlateNo = (string)results["clVehicPlateNo"];
                vehicleRecord.clVehicModel = (string)results["clVehicModel"];
                vehicleRecord.clVehicCol = (string)results["clVehicCol"];
                vehicleRecord.clPaymentMethod = (string)results["clPaymentMethod"];
                return vehicleRecord;
            }
            else
            {
                return null;
            }
        }
    }

PersonalInfoActivity.cs

private async void BtnGetAcc_Click(object sender, EventArgs e)
        {
            EditText username = FindViewById<EditText>(Resource.Id.txtUsername);

            if (!String.IsNullOrEmpty(username.Text))
            {
                VehicleRecord vehicleRecord = await Acc.GetAcc(username.Text);
                FindViewById<EditText>(Resource.Id.txtFullName).Text = vehicleRecord.clFullName;
                FindViewById<EditText>(Resource.Id.txtGender).Text = vehicleRecord.clGender;
                FindViewById<EditText>(Resource.Id.txtIC).Text = vehicleRecord.clICNo;
                FindViewById<EditText>(Resource.Id.txtAddress).Text = vehicleRecord.clAddress;
                FindViewById<EditText>(Resource.Id.txtPhoneNo).Text = vehicleRecord.clPhoneNo;
                FindViewById<EditText>(Resource.Id.txtEmail).Text = vehicleRecord.clEmail;
                FindViewById<EditText>(Resource.Id.txtPwd).Text = vehicleRecord.clPwd;
                FindViewById<EditText>(Resource.Id.txtPayMethod).Text = vehicleRecord.clPaymentMethod;
            }
        }

Ожидаемый вывод должен отображать все данные в соответствии с введенным именем пользователя, но фактический вывод отображает только 2/8 данных.

Ошибка, которую я получаю: System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Вывод на экран

1 Ответ

0 голосов
/ 26 апреля 2019

Мне кажется, что проблема начинается с этой строки

vehicleRecord.clICNo = (string)results["clICNo"];

Результаты IMO не содержат "clICNo".Проверьте это, окружив эту строку в блоке try - catch.

...