2016-04-04 10 views
0

DB'ime iki ikilileri dizeler olarak göndermeyi deniyorum, ancak şu hatayı alıyorum: " Atanmamış yerel değişkenin kullanılması "lat "+" lng ". İlk kez iki kat çalışarak tam olarak ne yapacağımı bilmiyorum. data hiç ürün vardıDB'mize bir çift göndermeye çalışıyorum, "Atanmamış yerel değişkeni kullan" lat "+" lng "

Geocoder gc = new Geocoder(); 
Task<IEnumerable<Position>> result = 
gc.GetPositionsForAddressAsync(theEnteredAdress); 
IEnumerable<Position> data = await result; 

double lat; 
double lng; 
foreach (Position p in data) 
{ 
    lat = p.Latitude; 
    lng = p.Longitude; 
} 

var sendInfo = await dbAPI.createInfo(lat.ToString(), lng.ToString()); 
// ^^ here are the two errors. I want to send them as strings 
+0

unutmayın olacak o sadece verideki son konumun lat ve long uzunluğuna sahip olur. Her seferinde foreach döngüsüyle bunları yazıyorsunuz. – Kevin

+0

Foreach döngüsünün dışında API’yı çağırmanız gerektiğinden emin misiniz? API'ye kaç kez aramasını istiyorsunuz? – mason

+0

sadece bir kez. Şimdi iyi çalışıyor mu? – medvedo

cevap

0

IMO, bu ne olup bittiğini hakkında biraz nettir ve (GetPositionsForAddressAsync() daima dönen olmadığını veriyi belirtir) Eğer yaşıyorsanız sorunu çözmelidir: ayrıca

var gc = new Geocoder(); 
var data = await gc.GetPositionsForAddressAsync(theEnteredAdress); 
var positions = data.ToArray(); 
if (positions.Any()) { 
    var p = positions.Last(); 
    var lat = p.Latitude; 
    var lng = p.Longitude; 
    var sendInfo = await dbAPI.createInfo(lat.ToString(), lng.ToString()); 
    // continue.... 
} 
+0

Neden şeyleri Array'a yerleştirdiniz? 'Var p = data.LastOrDefault();' ve sonra null için denetlemek temizleyici? – SKall

+0

@SKall - deneyin ve nedenini göreceksiniz. Bu bir IENumerable 've' Position 'bir yapıdır. Bu nedenle, LastOrDefault() 'ile null değerinin karşılaştırılması her zaman verimli olmaz. Fakat referans türleri için evet, bu şekilde yapardım. –

+0

Anladım. Genellikle bu durumlarda Select'i kullanırım ama bu başka bir hikaye. – SKall

2

bile, değişkenler başlatıldı olmaz. Deneyin:

double lat = 0; 
double lng = 0; 
foreach (Position p in data) 
{ 
    lat = p.Latitude; 
    lng = p.Longitude; 
} 

Bu garip mantık olsa, sen gerçekten sadece Basitçe değişkenler beyanı için bu eklemek data

+1

Tahminim, 'bekle' çağrısının da 'foreach' içinde yapılması gerektiği anlamına geliyor. –

+0

, bu yüzden verileri çıkarmaya ihtiyacım yok mu? Sadece kullanıcıların giriş adresi değerini istiyorum ve db'ye gönderin. Şimdi iyi çalışıyor gibi görünüyor? – medvedo

0

son değere lat ve lng atıyorsanız:

çift lat = 0 ; çift lng = 0;