2014-02-07 3 views
0

사용자 위도와 경도를 검색하는 클래스 개체가 있습니다. 여기위도와 경도로 0.0을 반환하는 Android 사용자 위치

userLocation = new UserLocation(this); 

클래스 조각입니다 : 내 UI 스레드에서 나는이 작업을 생성에서 onCreate 메소드에서 객체 생성 버튼을 누를 때, 이제 다시 메인 스레드에서

public UserLocation(Context mContext) { 
    //Pass parameter to class field: 
    this.mContext = mContext; 
    //Fetch the user's location: 
    fetchUserLocation(); 
} 

public void fetchUserLocation() { 
    // Acquire a reference to the system Location Manager: 
    LocationManager locationManager = (LocationManager)this.mContext.getSystemService(Context.LOCATION_SERVICE); 

    // Define a listener that responds to location updates: 
    LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     //Manage the data recieved: 
     makeUseOfLocation(location); 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) {} 

    public void onProviderEnabled(String provider) {} 

    public void onProviderDisabled(String provider) {} 


    }; 

    // Register the listener with the Location Manager to receive location updates: 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
} 

private void makeUseOfLocation(Location location) { 
    //Split the data of the location object: 
    userLatitude = location.getLatitude();      
    userLongitude = location.getLongitude();      

} 

/** 
* @return userLatitude 
*/ 
public double getLatitude() { 
    return userLatitude; 
} 

/** 
* @return userLongitude 
*/ 
public double getLongitude() { 
    return userLongitude; 
} 

을, 위도와 경도가 수집 : 내가 바로 그 버튼을 누르면

// GET THE LATITUDE AND LONGITUDE OF THE USER: 
    currentLatitude = userLocation.getLatitude(); 
    currentLongitude = userLocation.getLongitude(); 

지금 말을 위해 나는 응용 프로그램을 실행,받은 값은 위도와 경도 모두 0.0이다.

그러나 애플리케이션을 실행하고 4-5 초 정도 기다렸다가 버튼을 누르면 올바른 값이 수신됩니다.

누구든지이 동작의 원인을 알 수 있습니까?

필드가 null 인 경우 사용자가 응용 프로그램을 시작할 때 위도와 경도를 수집하는 메서드를 작성했을 때 알게되었습니다. 그럼 이것은 다시 0.0 값을 반환합니다.

감사합니다.

답변

0

누구든지이 동작의 원인을 알 수 있습니까?

음 예 - 위치를 즉시 알 수 없으므로은 0 - 0이 onLocationChanged 아직 호출되지 않은 보여주는거야 아마 때. 위치 관리자가 위치를 알고있을 때 위치 관리자에게 다시 전화하도록 요청했습니다. 즉, 위치를 즉시 확인하는 것과는 다릅니다. 당신이 알려진 전에 사용자에게 위치를보고 싶지 않은 경우

, 당신은 onLocationChanged이 호출 된 (또는이가 마지막으로 호출 될 때 잠재적으로 , 오래된 데이터를 보여주는 피하기 위해) 여부를 기억해야한다.

+0

좋습니다. 일단 UI 클래스에 refrence를 전달하고 onLocationChanged가 호출되면 해당 데이터를 처리하는 메서드를 호출하면 작동 할 수 있습니다. 유일한 문제는 위치가 변경 될 때마다 전화를 거는 것입니다. 사용자가 버튼을 누를 때만 업데이트 된 정보 만 원한다면 해결 방법을 알고 계십니까? –

+0

@VesicaPiscis : 솔직히 말해서, 당신이 무엇을 의미하는지 모르겠습니다. 그러나 사용자가 버튼을 클릭 할 때까지 기다려야하는 정보 * 또는 *를 듣고 싶을 때처럼 들리는 것처럼 들리지만, 다시 전화 할 때 UI * (및 구독 취소) 만 업데이트하면됩니다. 앱에 대해 더 많이 알지 못하면 어느 것이 가장 적절한 지 말하기 어렵습니다. 위치 업데이트의 비동기 특성을 앱에 통합하는 방법을 생각하면됩니다. –

관련 문제