android 获取城市名称,如何在android中使用纬度和经度获取城市名称

我正在尝试使用纬度和经度在TextView中获取城市.我得到IndexOutOfBoundsException.

AndroidGPSTrackingActivity.java

import android.app.Activity;

import android.location.Address;

import android.location.Geocoder;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

import java.io.IOException;

import java.util.List;

import java.util.Locale;

import static com.example.khaledsb.location.R.id.lng;

import static java.util.Locale.*;

public class AndroidGPSTrackingActivity extends Activity {

public static float distFrom(float lat1,float lng1,float lat2,float lng2) {

double earthRadius = 6371000; //meters

double dLat = Math.toRadians(lat2-lat1);

double dLng = Math.toRadians(lng2-lng1);

double a = Math.sin(dLat/2) * Math.sin(dLat/2) +

Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *

Math.sin(dLng/2) * Math.sin(dLng/2);

double c = 2 * Math.atan2(Math.sqrt(a),Math.sqrt(1-a));

float dist = (float) (earthRadius * c);

return dist;

}

Button btnShowLocation;

// GPSTracker class

GPSTracker gps;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btnShowLocation = (Button) findViewById(R.id.btnShowLocation);

final TextView lat =(TextView) findViewById(R.id.lat);

final TextView lon = (TextView) findViewById(R.id.longt);

final TextView addr = (TextView) findViewById(R.id.address);

// show location button click event

btnShowLocation.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

// create class object

gps = new GPSTracker(AndroidGPSTrackingActivity.this);

// check if GPS enabled

if(gps.canGetLocation()){

double latitude = gps.getLatitude();

double longitude = gps.getLongitude();

double Distance;

Distance = distFrom((float) 36.5925907,2.9051544f,36.5805505f,2.914749f);

lat.setText(String.valueOf(latitude));

lon.setText(String.valueOf(longitude));

Geocoder geocoder = new Geocoder(AndroidGPSTrackingActivity.this,Locale.ENGLISH);

try {

List

addresses = geocoder.getFromLocation(latitude,longitude,1);

if(addresses != null) {

Address returnedAddress = addresses.get(0);

StringBuilder strReturnedAddress = new StringBuilder("Address:\n");

for(int i=0; i

strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");

}

addr.setText(strReturnedAddress.toString());

}

else{

addr.setText("No Address returned!");

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

addr.setText("Can not get Address!");

}

// \n is for new line

//Toast.makeText(getApplicationContext(),"Your Location is - \nLat: " + latitude + "\nLong: " + longitude+" " +

//" diastance "+Distance,Toast.LENGTH_LONG).show();

}else{

// can't get location

// GPS or Network is not enabled

// Ask user to enable GPS/network in settings

gps.showSettingsAlert();

}

}

});

}

}

我在logcat中收到以下错误:

5-09 11:17:21.858 4501-4501/com.example.khaledsb.location E/AndroidRuntime: FATAL EXCEPTION: main

java.lang.IndexOutOfBoundsException: Invalid index 0,size is 0

at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)

at java.util.ArrayList.get(ArrayList.java:304)

at com.example.khaledsb.location.AndroidGPSTrackingActivity$1.onClick(AndroidGPSTrackingActivity.java:79)

at android.view.View.performClick(View.java:4204)

at android.view.View$PerformClick.run(View.java:17355)

at android.os.Handler.handleCallback(Handler.java:725)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

at android.app.ActivityThread.main(ActivityThread.java:5041)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:511)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

at dalvik.system.NativeStart.main(Native Method)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值