【问题标题】:getting city name from coordinates从坐标中获取城市名称
【发布时间】:2018-06-19 16:38:09
【问题描述】:

我的应用获取用户坐标。现在我尝试获取坐标所属城市的名称。我搜索了其他线程,但没有发现任何有用或新的东西。我应该显示地址名称的 textView 只是保持为空,还是获取地址的方法错误?

我的代码:

public class MainActivity extends AppCompatActivity {

    double lat;
    double lon;
    Button btnLoc;
    TextView textView7;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView7 = (TextView) findViewById(R.id.textView7);

        btnLoc = (Button) findViewById(R.id.btnGetLoc);
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);

        btnLoc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                GPSTracker gt = new GPSTracker(getApplicationContext());
                Location location = gt.getLocation();

                if (location == null) {
                    Toast.makeText(getApplicationContext(), "GPS unable to get Value", Toast.LENGTH_SHORT).show();
                } else {

                    double lat = location.getLatitude();
                    double lon = location.getLongitude();

                    TextView textView5 = (TextView) findViewById(R.id.textView5);
                    textView5.setText(String.valueOf(lat));

                    TextView textView6 = (TextView) findViewById(R.id.textView6);
                    textView6.setText(String.valueOf(lon));

                }
            }
        });

        try {

            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
            List<Address> addresses = geocoder.getFromLocation(lat, lon, 1);
            if (addresses.size() > 0)

                textView7.setText(addresses.get(0).getLocality());
        } catch (IOException e) {

        }
    }
}

【问题讨论】:

    标签: java android coordinates


    【解决方案1】:

    我注意到了一些事情。

    1. 您没有初始化您在活动范围中定义的 lat 和 long。

      双纬度; 双倍;

    当你将它们传递给你的函数时,它们将保持为空

    List<Address> addresses = geocoder.getFromLocation(lat, lon, 1);
    

    因此,您可能想尝试从 click 函数中的 lat/long 变量中删除类型。

                - double lat = location.getLatitude();
                - double lon = location.getLongitude();
    
    
                + lat = location.getLatitude();
                + lon = location.getLongitude();
    
    1. 尝试在您点击后获取您的结果。不是在初始化单击侦听器之后。由于您在获取您的位置后没有适当的回调设置来触发(我假设它是一个异步调用),您可以通过设置另一个按钮/单击侦听器来暂时克服这个问题,您可以在获取后单击该侦听器你的坐标。

    如果这不起作用,请查看这个简短的有用指南 https://www.kerstner.at/2013/08/convert-gps-coordinates-to-address-using-google-geocoding-api-in-java/

    干杯

    【讨论】:

    • 哦,是的,我的错。所以当我删除获取方法中的“double”时,它们被初始化了,对吧?我不知道你点击后获取结果是什么意思。点击按钮时不应该获取变量吗?
    • 是的,但是这个 sn-p: Geocoder geocoder = new Geocoder(this, Locale.getDefault());只运行一次。它不在您的点击侦听器内。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多