Как Xamarin.Forms может читать json из WCF? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь создать свое первое Xamarin.Forms мобильное приложение с картой и булавками, поэтому, пожалуйста, потерпите меня.

Я пытаюсь добавить булавки на карту.Я использую этот код для добавления одного пина:

map = new Map { 
    IsShowingUser = true,
    HeightRequest = 100,
    WidthRequest = 960,
    VerticalOptions = LayoutOptions.FillAndExpand
};

map.MoveToRegion (MapSpan.FromCenterAndRadius (
    new Position (36.9628066,-122.0194722), Distance.FromMiles (3)));

var position = new Position(36.9628066,-122.0194722);
var pin = new Pin {
    Type = PinType.Place,
    Position = position,
    Label = "Santa Cruz",
    Address = "custom detail info"
};
map.Pins.Add(pin);

Теперь, вместо добавления только одного пина, я бы хотел добавить несколько пинов из таблицы tsql.

Итак, я создалWCF service, который возвращает список координат.Один возвращает json, а другой возвращает datatable:

public DataTable ToEraseGetCoordinates()
{
    string sqlQuery = "select lat,lon from MyStores";
    string connString = GetConnString();
    SqlDatabase sqlDatabase = new SqlDatabase(connString);
    DataSet result = sqlDatabase.ExecuteDataSet(CommandType.Text, sqlQuery);
    return result.Tables[0];
}
public System.IO.Stream ToEraseGetCoordinatesJson()
{
    string sqlQuery = "select lat,lon from MyStores";
    string connString = GetConnString();
    SqlDatabase sqlDatabase = new SqlDatabase(connString);
    DataSet result = sqlDatabase.ExecuteDataSet(CommandType.Text, sqlQuery);
    return ConvertToJson(result.Tables[0]);
}

Я вызываю WCF следующим образом: http://80.102.51.381:101/Service1.svc/ToEraseGetCoordinates (для представления данных в формате XML)

ДляJSON: http://80.102.51.381:101/Service1.svc/ToEraseGetCoordinatesJson, который возвращает это:

{"lat":25.7616,"lon":-80.1917},{"lat": 28.5383,"lon":-81.3792}

Мой вопрос: что мне делать дальше, чтобы мой Xamarin.Form считывал это?

Независимо от типа возвращаемого значения, яне знаю, как Xamarin будет потреблять WCF и рисовать булавки.

1 Ответ

0 голосов
/ 02 февраля 2019

Этот образец карты землетрясения делает в основном то, что вы хотите (он немного стар, к сожалению).

В основном вы хотите загрузить свой Json (например, в этот класс )

// your http://80.102.51.381:101/Service1.svc/ToEraseGetCoordinatesJson would go here
var response = await client.GetAsync("earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=bertt");
var earthquakesJson = response.Content.ReadAsStringAsync().Result;

тогда вам нужно конвертировать Json - но вы сказали, что уже сделали, что

var rootobject = JsonConvert.DeserializeObject<Rootobject>(earthquakesJson);

, наконец, просто создайте и добавьте булавки на карту

var earthquakes = await webSvc.GetEarthquakesAsync();
Xamarin.Forms.Device.BeginInvokeOnMainThread( () => {
    Debug.WriteLine("found " + earthquakeString.Length + " earthquakes");
    label.Text = earthquakeString.Length + " earthquakes";
    foreach (var earthquake in earthquakes)
    {
        var p = new Pin();
        p.Position = new Position(earthquake.lat, earthquake.lng);
        p.Label = "Magnitude: " + earthquake.magnitude;
        m.Pins.Add(p);
    }
});

Изначально контакты не могли быть привязаны к данным, поэтому они добавляются в циклы.Не уверен, что с Xamarin.Forms была добавлена ​​возможность связывания данных с помощью пингов.

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

См. Документы к картам и для карт пользовательских средств визуализации для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...