Xamarin形式的System.ArgumentOutOfRangeException

时间:2019-01-09 05:45:21

标签: xamarin xamarin.forms xamarin.android

下面的代码将数据一一发送到我的服务器。问题是我有。我不知道为什么会这样。例如,我正在发送10个数据,将仅发送9个,最后一个失败,并显示异常。可能是什么原因造成的?

  

System.ArgumentOutOfRangeException:索引超出范围。必须为非负数并且小于集合的大小。参数名称:索引

var db = DependencyService.Get<ISQLiteDB>();
var conn = db.GetConnection();
var current_datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

var changessql = "SELECT * FROM tblCaf WHERE EmployeeID = '" + contact + "' AND LastUpdated > LastSync AND Deleted != '1'";
var getCAFChanges = conn.QueryAsync<CAFTable>(changessql);
var changesresultCount = getCAFChanges.Result.Count;

if (changesresultCount > 0)
{
   for (int i = 0; i < changesresultCount; i++)
   {
       lblStatus.Text = "Sending coordinator activity changes to server " + (i + 1) + " out of " + changesresultCount;

       var crresult = getCAFChanges.Result[i];
       var crcafNo = crresult.CAFNo;
       var cremployeeID = crresult.EmployeeID;
       var crcafDate = crresult.CAFDate;
       var crcustomerID = crresult.CustomerID;
       var crstartTime = crresult.StartTime;
       var crendTime = crresult.EndTime;
       var crphoto1 = crresult.Photo1;
       var crphoto2 = crresult.Photo2;
       var crphoto3 = crresult.Photo3;
       var crvideo = crresult.Video;
       var crmobilePhoto1 = crresult.MobilePhoto1;
       var crmobilePhoto2 = crresult.MobilePhoto2;
       var crmobilePhoto3 = crresult.MobilePhoto3;
       var crmobileVideo = crresult.MobileVideo;
       var crremarks = crresult.Remarks;
       var crotherConcern = crresult.OtherConcern;
       var crdeleted = crresult.Deleted;
       var crlastUpdated = crresult.LastUpdated;

       var crlink = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=k5N7PE";
        string crcontentType = "application/json";
        Object crjson = new JObject
        {
           { "CAFNo", crcafNo },
           { "EmployeeID", cremployeeID },
           { "CAFDate", crcafDate },
           { "CustomerID", crcustomerID },
           { "StartTime", crstartTime },
           { "EndTime", crendTime },
           { "MobilePhoto1", crmobilePhoto1 },
           { "MobilePhoto2", crmobilePhoto2 },
           { "MobilePhoto3", crmobilePhoto3 },
           { "MobileVideo", crmobileVideo },
           { "Remarks", crremarks },
           { "OtherConcern", crotherConcern },
           { "Deleted", crdeleted },
           { "LastUpdated", crlastUpdated }
        };

        HttpClient crclient = new HttpClient();
        var crresponse = await crclient.PostAsync(crlink, new StringContent(crjson.ToString(), Encoding.UTF8, crcontentType));

        if (crresponse.IsSuccessStatusCode)
        {
            byte[] crPhoto1Data = File.ReadAllBytes(crphoto1);

            var ph1link = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=N4f5GL";
            string ph1contentType = "application/json";
            JObject ph1json = new JObject
            {
                { "CAFNo", crcafNo },
                { "CAFDate", crcafDate },
                { "Photo1", crPhoto1Data }
             };

             HttpClient ph1client = new HttpClient();
             var ph1response = await ph1client.PostAsync(ph1link, new StringContent(ph1json.ToString(), Encoding.UTF8, ph1contentType));

             if (ph1response.IsSuccessStatusCode)
             {
                  byte[] crPhoto2Data = File.ReadAllBytes(crphoto2);

                  var ph2link = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=6LqMxW";
                  string ph2contentType = "application/json";
                  JObject ph2json = new JObject
                  {
                      { "CAFNo", crcafNo },
                      { "CAFDate", crcafDate },
                      { "Photo2", crPhoto2Data }
                  };

                  HttpClient ph2client = new HttpClient();
                  var ph2response = await ph2client.PostAsync(ph2link, new StringContent(ph2json.ToString(), Encoding.UTF8, ph2contentType));

                  if (ph2response.IsSuccessStatusCode)
                  {
                      byte[] crPhoto3Data = File.ReadAllBytes(crphoto3);

                      var ph3link = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=Mpt2Y9";
                       string ph3contentType = "application/json";
                       JObject ph3json = new JObject
                       {
                          { "CAFNo", crcafNo },
                          { "CAFDate", crcafDate },
                          { "Photo3", crPhoto3Data }
                       };

                       HttpClient ph3client = new HttpClient();
                       var ph3response = await ph3client.PostAsync(ph3link, new StringContent(ph3json.ToString(), Encoding.UTF8, ph3contentType));

                       if (ph3response.IsSuccessStatusCode)
                       {
                          try
                          {
                              byte[] crVideoData;

                              if (!string.IsNullOrEmpty(crvideo))
                              {
                                  crVideoData = File.ReadAllBytes(crvideo);
                              }
                              else
                              {
                                   crVideoData = null;
                              }

                              if (!string.IsNullOrEmpty(crvideo))
                              {
                                  try
                                  {
                                      var vidlink = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=Lqr9fy";
                                      string vidcontentType = "application/json";
                                      JObject vidjson = new JObject
                                      {
                                          { "CAFNo", crcafNo },
                                          { "CAFDate", crcafDate },
                                          { "Video", crVideoData }
                                      };

                                      HttpClient vidclient = new HttpClient();
                                      var vidresponse = await vidclient.PostAsync(vidlink, new StringContent(vidjson.ToString(), Encoding.UTF8, vidcontentType));

                                       if (vidresponse.IsSuccessStatusCode)
                                       {
                                           await conn.QueryAsync<CAFTable>("UPDATE tblCaf SET LastSync = ? WHERE CAFNo = ?", DateTime.Parse(current_datetime), crcafNo);
                                       }
                                   }
                                   catch (Exception ex)
                                   {
                                      Crashes.TrackError(ex);

                                      var seedata = await DisplayAlert("Sync Error", "Video send failed, unstable connection to server", "See unsynced data", "Cancel");
                                      if (seedata == true)
                                      {
                                         await Navigation.PushAsync(new UnsyncedData(host, database, contact, ipaddress, pingipaddress));
                                      }
                                   }
                               }
                               else
                               {
                                   await conn.QueryAsync<CAFTable>("UPDATE tblCaf SET LastSync = ? WHERE CAFNo = ?", DateTime.Parse(current_datetime), crcafNo);
                               }
                         }
                         catch(Exception ex)
                         {
                             Crashes.TrackError(ex);

                             var seedata = await DisplayAlert("Sync Error", "Activity send failed, unstable connection to server", "See unsynced data", "Cancel");
                             if (seedata == true)
                             {
                                 await Navigation.PushAsync(new UnsyncedData(host, database, contact, ipaddress, pingipaddress));
                             }
                      }
                    }
                  }
                }
             }
           }
        }

1 个答案:

答案 0 :(得分:1)

我建议您使用foreach循环,这将使您摆脱讨厌的System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index异常。

         foreach (var crresult in getCAFChanges.Result)
        {
           // lblStatus.Text = "Sending coordinator activity changes to server " + (i + 1) + " out of " + changesresultCount;


            var crcafNo = crresult.CAFNo;
            var cremployeeID = crresult.EmployeeID;
            var crcafDate = crresult.CAFDate;
            var crcustomerID = crresult.CustomerID;
            var crstartTime = crresult.StartTime;
            var crendTime = crresult.EndTime;
            var crphoto1 = crresult.Photo1;
            var crphoto2 = crresult.Photo2;
            var crphoto3 = crresult.Photo3;
            var crvideo = crresult.Video;
            var crmobilePhoto1 = crresult.MobilePhoto1;
            var crmobilePhoto2 = crresult.MobilePhoto2;
            var crmobilePhoto3 = crresult.MobilePhoto3;
            var crmobileVideo = crresult.MobileVideo;
            var crremarks = crresult.Remarks;
            var crotherConcern = crresult.OtherConcern;
            var crdeleted = crresult.Deleted;
            var crlastUpdated = crresult.LastUpdated;

            var crlink = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=k5N7PE";
            string crcontentType = "application/json";
            Object crjson = new JObject
    {
       { "CAFNo", crcafNo },
       { "EmployeeID", cremployeeID },
       { "CAFDate", crcafDate },
       { "CustomerID", crcustomerID },
       { "StartTime", crstartTime },
       { "EndTime", crendTime },
       { "MobilePhoto1", crmobilePhoto1 },
       { "MobilePhoto2", crmobilePhoto2 },
       { "MobilePhoto3", crmobilePhoto3 },
       { "MobileVideo", crmobileVideo },
       { "Remarks", crremarks },
       { "OtherConcern", crotherConcern },
       { "Deleted", crdeleted },
       { "LastUpdated", crlastUpdated }
    };

            HttpClient crclient = new HttpClient();
            var crresponse = await crclient.PostAsync(crlink, new StringContent(crjson.ToString(), Encoding.UTF8, crcontentType));

            if (crresponse.IsSuccessStatusCode)
            {
                byte[] crPhoto1Data = File.ReadAllBytes(crphoto1);

                var ph1link = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=N4f5GL";
                string ph1contentType = "application/json";
                JObject ph1json = new JObject
        {
            { "CAFNo", crcafNo },
            { "CAFDate", crcafDate },
            { "Photo1", crPhoto1Data }
         };

                HttpClient ph1client = new HttpClient();
                var ph1response = await ph1client.PostAsync(ph1link, new StringContent(ph1json.ToString(), Encoding.UTF8, ph1contentType));

                if (ph1response.IsSuccessStatusCode)
                {
                    byte[] crPhoto2Data = File.ReadAllBytes(crphoto2);

                    var ph2link = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=6LqMxW";
                    string ph2contentType = "application/json";
                    JObject ph2json = new JObject
              {
                  { "CAFNo", crcafNo },
                  { "CAFDate", crcafDate },
                  { "Photo2", crPhoto2Data }
              };

                    HttpClient ph2client = new HttpClient();
                    var ph2response = await ph2client.PostAsync(ph2link, new StringContent(ph2json.ToString(), Encoding.UTF8, ph2contentType));

                    if (ph2response.IsSuccessStatusCode)
                    {
                        byte[] crPhoto3Data = File.ReadAllBytes(crphoto3);

                        var ph3link = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=Mpt2Y9";
                        string ph3contentType = "application/json";
                        JObject ph3json = new JObject
                   {
                      { "CAFNo", crcafNo },
                      { "CAFDate", crcafDate },
                      { "Photo3", crPhoto3Data }
                   };

                        HttpClient ph3client = new HttpClient();
                        var ph3response = await ph3client.PostAsync(ph3link, new StringContent(ph3json.ToString(), Encoding.UTF8, ph3contentType));

                        if (ph3response.IsSuccessStatusCode)
                        {
                            try
                            {
                                byte[] crVideoData;

                                if (!string.IsNullOrEmpty(crvideo))
                                {
                                    crVideoData = File.ReadAllBytes(crvideo);
                                }
                                else
                                {
                                    crVideoData = null;
                                }

                                if (!string.IsNullOrEmpty(crvideo))
                                {
                                    try
                                    {
                                        var vidlink = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=Lqr9fy";
                                        string vidcontentType = "application/json";
                                        JObject vidjson = new JObject
                                  {
                                      { "CAFNo", crcafNo },
                                      { "CAFDate", crcafDate },
                                      { "Video", crVideoData }
                                  };

                                        HttpClient vidclient = new HttpClient();
                                        var vidresponse = await vidclient.PostAsync(vidlink, new StringContent(vidjson.ToString(), Encoding.UTF8, vidcontentType));

                                        if (vidresponse.IsSuccessStatusCode)
                                        {
                                            await conn.QueryAsync<CAFTable>("UPDATE tblCaf SET LastSync = ? WHERE CAFNo = ?", DateTime.Parse(current_datetime), crcafNo);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Crashes.TrackError(ex);

                                        var seedata = await DisplayAlert("Sync Error", "Video send failed, unstable connection to server", "See unsynced data", "Cancel");
                                        if (seedata == true)
                                        {
                                            await Navigation.PushAsync(new UnsyncedData(host, database, contact, ipaddress, pingipaddress));
                                        }
                                    }
                                }
                                else
                                {
                                    await conn.QueryAsync<CAFTable>("UPDATE tblCaf SET LastSync = ? WHERE CAFNo = ?", DateTime.Parse(current_datetime), crcafNo);
                                }
                            }
                            catch (Exception ex)
                            {
                                Crashes.TrackError(ex);

                                var seedata = await DisplayAlert("Sync Error", "Activity send failed, unstable connection to server", "See unsynced data", "Cancel");
                                if (seedata == true)
                                {
                                    await Navigation.PushAsync(new UnsyncedData(host, database, contact, ipaddress, pingipaddress));
                                }
                            }




                        }