0

Android アプリケーションで緯度と経度を調べようとしています。私が使用しているコードは次のとおりです:-

protected int findZipCode() {

    LocationManager lm = (LocationManager) getApplicationContext()
            .getSystemService(Context.LOCATION_SERVICE);
    LocationListener listener = new MyLocationListener();
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000,
            1000, listener);
    if (zipCode == null) {
        return 0;
    } else {
        return Integer.parseInt(zipCode);
    }
}

private class MyLocationListener implements LocationListener {

    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        if (location != null) {
            Geocoder geo = new Geocoder(getApplicationContext());
            List<Address> addr = null;
            try {
                addr = geo.getFromLocation(location.getLatitude(),
                        location.getLatitude(), 5);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            zipCode = addr.get(0).getPostalCode();
        }
    }

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

    }

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

    }

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

    }

}

しかし、このコードは常に郵便番号に対して null 値を返すようです。どんな助けでも素晴らしいでしょう。

前もって感謝します!!

4

2 に答える 2

0

その時点MyLocationListener で並行して実行しているため、zipCode は null であるため、0 の値を取得しています。

修理

が完了するのを待ってこれにメソッドをMyLocationListener渡すことができ、この関数の完了時にそのメソッドを呼び出すことができます。interfacelistener

于 2012-12-04T14:27:29.657 に答える
0

何してるの?

lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000,1000, listener);

上記の行は非同期呼び出しで、位置修正を取得するとリスナーが呼び出されます。この行の直後では、郵便番号を確認できません。zipcode の値を取得する場合、listner で、アクティビティまたは必要な場所で zipcode の値を取得するインターフェイス/コールバックを実装します。

于 2012-12-04T14:27:46.573 に答える