Frage

using System;
using Android.App;
using Android.Os;
using Android.Widget;
using Dot42;
using Dot42.Manifest;
using Android.Location;


[assembly:UsesPermission(Android.Manifest.Permission.ACCESS_COARSE_LOCATION)]
[assembly:UsesPermission(Android.Manifest.Permission.INTERNET)]
[assembly:UsesPermission(Android.Manifest.Permission.ACCESS_FINE_LOCATION)]

[assembly: Application("simplegps")]

namespace simplegps
{
    [Activity]
    public class MainActivity : Activity
    {

        private LocationManager service;
        private bool enable;
        private string provider;

        protected override void OnCreate(Bundle savedInstance) 
        {
            base.OnCreate(savedInstance);
            SetContentView(R.Layouts.MainLayout);


            var txtprovider= FindViewById <TextView>(R.Ids.txtprovider);
            var gpsstatus= FindViewById <TextView>(R.Ids.gpsstatus);
            var txtcity = FindViewById<TextView>(R.Ids.txtcity);
            var txtlat = FindViewById<TextView>(R.Ids.txtlat);
            var txtlon = FindViewById<TextView>(R.Ids.txtlon);

            service=(LocationManager)GetSystemService(LOCATION_SERVICE);

            enable=service.IsProviderEnabled(LocationManager.GPS_PROVIDER);


            if(enable)
            {
                gpsstatus.Text="Gps enabled";
            }

            else
            {
                gpsstatus.Text="Gps not enabled";
                return;
            }

            var criteria = new Criteria{Accuracy = Criteria.ACCURACY_FINE};
            provider = service.GetBestProvider(criteria,false);
            var location = service.GetLastKnownLocation(provider);

            if(location !=null)
            {
                txtprovider.Text=provider;
                var latitude = location.Latitude;
                var longitude = location.Longitude;

                txtlat.Text=latitude.ToString();
                txtlon.Text=longitude.ToString();
            }

            else
            {
                txtprovider.Text="no location";
                return;
            }

            if(Geocoder.IsPresent())
            {
                Android.Location.Geocoder geo;
                Android.Location.Address adds;
                  adds=geo.GetFromLocation(location.GetLatitude(),location.GetLongitude(),1);

            }
        }
   }
}

Fehlermeldung: Es wird Fehler angezeigt "kann nicht implizit den Typ 'java.util.ilist' in 'android.location.address' konvertieren. Es gibt eine explizite Konvertierung (fehlt Ihnen ein Cast?) (CS0266)"

War es hilfreich?

Lösung

Dies ist die Zeile, die fehlschlägt:

adds = geo.GetFromLocation(location.GetLatitude(), location.GetLongitude(), 1)

geo.GetFromLocation kehrt zurück Java.Util.IList<Address>. adds ist vom Typ Address. Daher der Kompilierfehler.

Verwenden Sie den Indexbetreiber, um auf eine der Adressen zuzugreifen.

enter image description here

BEARBEITEN

Sie sollten auch initialisieren geo Bevor Sie es verwenden:

Geocoder geo = new Geocoder(this, Locale.getDefault()); 

Schließlich kann GetFromLocation NULL oder eine leere Liste zurückgeben. Überprüfen Sie also beides.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top