GPS, добавление функции и возврат значения из класса locationManager - PullRequest
1 голос
/ 24 ноября 2011

Я делаю основной GPS. Я хочу поместить класс слушателя местоположения в отдельный файл и добавить несколько функций, это не представляется возможным. Я получаю эту ошибку, когда пытаюсь получить возвращаемое значение из getLatitude: // Метод getLongitude не определен для типа Location Listener.

Есть ли способ сделать класс своим собственным? Код:

import com.google.android.maps.*;
//import com.learntoprogram.android.GeoLocationActivity.mylocationlistener;
import Maps.GeoLocation.Google.mylocationlistener;

import android.app.Activity;
import android.content.Context;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class MapsGeoLocationActivity extends MapActivity {

    MapController mControl;
    GeoPoint GeoP;
    MapView mapV;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener ll = new mylocationlistener();
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);

        mapV = (MapView) findViewById(R.id.mapView);
        mapV.displayZoomControls(true);
        mapV.setBuiltInZoomControls(true);

        double lat = ll.getLongitude(); //The method getLongitude is undefined for the type Location Listener
        double longi = -96.666;

        GeoP = new GeoPoint ((int) (lat *1E6), (int) (longi *1E6));
        mControl = mapV.getController();
        mControl.animateTo(GeoP);
        mControl.setZoom(13);

    }


    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}

Код класса: mylocationmanager.java

package Maps.GeoLocation.Google;

import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;

public class mylocationlistener implements LocationListener {
double pLong;
double pLat;
    @Override
    public void onLocationChanged(Location location) {
        if(location != null)
        {
            pLong = location.getLongitude();
            pLat = location.getLatitude();



        }
        else
        {
            pLong = 40.8;
            pLat = -96.666;
        }



    }

    public double getLongitude() {
        return pLong;
    }

    public double getLatitude() {
        return pLat;
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

}

Ответы [ 3 ]

0 голосов
/ 24 ноября 2011

Изменить LocationListener ll на mylocationlistener ll

как методы getLongitude() и getLatitude() относятся к классу mylocationlistener

0 голосов
/ 24 ноября 2011

Это происходит потому, что у вас есть экземпляр LocationListener, у которого нет таких методов.

Также может быть полезно создать интерфейс обратного вызова, чтобы сделать что-то вроде этого:

MyLocationListener = new LocationListener(
    new Callback() {
       public void onSuccess() {
          // Do something inside caller class
       }
    }
);

Итак, для этого у вас должен быть соответствующий конструктор

РЕДАКТИРОВАТЬ: LocationListener является асинхронным, поэтому плохая практика - получать значения синхронно

0 голосов
/ 24 ноября 2011

Это из-за этой строки

LocationListener ll = new mylocationlistener();

изменить на

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