Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在android中使用地理编码器从坐标获取地址_Android_Google Maps_Android Mapview_Geocoding - Fatal编程技术网

无法在android中使用地理编码器从坐标获取地址

无法在android中使用地理编码器从坐标获取地址,android,google-maps,android-mapview,geocoding,Android,Google Maps,Android Mapview,Geocoding,我试图通过使用Geocoder类的对象提供其坐标来显示该位置的地址,但每次我收到0个地址 这是我的活动代码: package com.packr.activities; import android.content.Context; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.Locatio

我试图通过使用Geocoder类的对象提供其坐标来显示该位置的地址,但每次我收到0个地址

这是我的活动代码:

package com.packr.activities;

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.packr.R;
import com.packr.classes.LocationProvider;


import java.io.IOException;
import java.io.InputStream;
import java.util.List;


public class PickupActivity extends FragmentActivity implements LocationProvider.LocationCallback {

    public static final String TAG = PickupActivity.class.getSimpleName();

    private GoogleMap mMap; // Might be null if Google Play services APK is not available.

    private LocationProvider mLocationProvider;
    private LatLng center;
    private TextView pickupMarker;
    private LinearLayout markerLayout;
    private List<Address> addresses;
    private TextView address;
    private Geocoder geocoder;
    private Marker m;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pickup);
        initialize();
        onClick();
        setUpMapIfNeeded();

        mLocationProvider = new LocationProvider(this, this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
        mLocationProvider.connect();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mLocationProvider.disconnect();
    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
        }
    }

    private void setUpMap() {
        //mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
        mMap.getUiSettings().setMyLocationButtonEnabled(true);
        mMap.setMyLocationEnabled(true);
    }

    public void handleNewLocation(Location location) {
        Log.d(TAG, location.toString());

        double currentLatitude = location.getLatitude();
        double currentLongitude = location.getLongitude();
        LatLng latLng = new LatLng(currentLatitude, currentLongitude);


        mMap.setMyLocationEnabled(true);
        //mMap.getUiSettings().setZoomControlsEnabled(true);
        mMap.getUiSettings().setMyLocationButtonEnabled(true);
        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(latLng).zoom(19f).tilt(0).build();
        mMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
        mMap.clear();
        mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {

            @Override
            public void onCameraChange(CameraPosition arg0) {
                // TODO Auto-generated method stub
                center = mMap.getCameraPosition().target;

                pickupMarker.setText(" Set your Location ");
                mMap.clear();

                try {
                    new GetLocationAsync(center.latitude, center.longitude)
                            .execute();
                    Log.e("Coordinates",(center.longitude + "" + center.latitude));

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });


    }

    public void initialize(){
        pickupMarker = (TextView)findViewById(R.id.locationMarkertext);
        markerLayout = (LinearLayout)findViewById(R.id.locationMarker);
        address = (TextView)findViewById(R.id.addressText);
    }

    public void onClick() {

        markerLayout.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    LatLng latLng1 = new LatLng(center.latitude,
                            center.longitude);

                    m = mMap.addMarker(new MarkerOptions()
                            .position(latLng1)
                            .title(" Set your Location ")
                            .snippet("Arindam")
                            .icon(BitmapDescriptorFactory
                                    .fromResource(R.drawable.ic_cast_light)));
                    m.setDraggable(true);
                    address.setText((center.latitude+","+center.longitude));

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

        });
    }

    private class GetLocationAsync extends AsyncTask<String, Void, String> {

        // boolean duplicateResponse;
        double x, y;
        StringBuffer str;

        public GetLocationAsync(double latitude, double longitude) {
            // TODO Auto-generated constructor stub

            x = latitude;
            y = longitude;
        }

        @Override
        protected void onPreExecute() {
            address.setText(" Getting your location ");
        }

        @Override
        protected String doInBackground(String... params) {

            try {
                geocoder = new Geocoder(getApplicationContext());
                addresses = geocoder.getFromLocation(x,y,1);
                str = new StringBuffer();
                if (Geocoder.isPresent()) {
                   if( null!=addresses&&addresses.size()>0){
                    Address returnAddress = addresses.get(0);

                    String localityString = returnAddress.getLocality();
                    String city = returnAddress.getCountryName();
                    String region_code = returnAddress.getCountryCode();
                    String zipcode = returnAddress.getPostalCode();

                    str.append(localityString).append("");
                    str.append(city).append("").append(region_code).append("");
                    str.append(zipcode).append("");}

                } else {
                }
            } catch (IOException e) {
                Log.e("tag", e.getMessage());
            }
            return null;

        }

        @Override
        protected void onPostExecute(String result) {
            try {
                if (!addresses.isEmpty())
                address.setText(addresses.get(0).getAddressLine(0)
                        + addresses.get(0).getAddressLine(1) + " ");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void onProgressUpdate(Void... values) {

        }
    }



}
下面是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.packr" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!--
 The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but are recommended.
    -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />



    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".activities.PickupActivity"
            android:label="@string/title_activity_pickup" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

谁能解释一下为什么我每次都得到0个结果。我发现了类似的问题,但没有帮助。

您的问题在这里:

    public GetLocationAsync(double latitude, double longitude) {
        // TODO Auto-generated constructor stub

        x = latitude;
        y = longitude;
    }

x是经度,y是纬度

我不这么认为。获取相同的零结果,这是错误的,但您在geocoder.getFromLocation中再次将其放错,然后不是它。你确定Geocoder.isPresent是真的吗?我不知道安卓系统是如何实现的,我一直在使用它
    public GetLocationAsync(double latitude, double longitude) {
        // TODO Auto-generated constructor stub

        x = latitude;
        y = longitude;
    }