我对地理编码器有一点问题是从地址获取纬度和纬度:
这是我的代码:
for (Garage g : XMLGarage) {
List<Address> address;
address = coder.getFromLocationName(
g.getAddress(), 5);
if (address != null) {
Address location = address.get(0);
g.setLatitude(location.getLatitude());
g.setLongitude(location.getLongitude());
...
Run Code Online (Sandbox Code Playgroud)
错误是:
08-18 14:28:56.026: WARN/System.err(359): java.io.IOException: Service not Available
08-18 14:28:56.026: WARN/System.err(359): at
android.location.Geocoder.getFromLocationName(Geocoder.java:178)
08-18 14:28:56.026: WARN/System.err(359): at
com.amt.android.garage.Garage.postData(Garage.java:269)
08-18 14:28:56.026: WARN/System.err(359): at
com.amt.android.garage.GarageForm$2.onClick(GarageForm.java:86)
08-18 14:28:56.026: WARN/System.err(359): at
android.view.View.performClick(View.java:2485)
08-18 14:28:56.026: WARN/System.err(359): at
android.view.View$PerformClick.run(View.java:9080)
08-18 14:28:56.036: WARN/System.err(359): at
android.os.Handler.handleCallback(Handler.java:587)
08-18 14:28:56.036: WARN/System.err(359): at
android.os.Handler.dispatchMessage(Handler.java:92)
08-18 14:28:56.036: WARN/System.err(359): at
android.os.Looper.loop(Looper.java:130)
08-18 14:28:56.036: WARN/System.err(359): at
android.app.ActivityThread.main(ActivityThread.java:3683) …Run Code Online (Sandbox Code Playgroud) 描述:我正在使用Google maps API V2.我已Android Reverse Geocoding在触摸位置实施.
问题:它抛出异常
try {
addresses = geocoder.getFromLocation(latitude, longitude,1);}
catch (IOException e)
{
e.printStackTrace();
if(AppConstants.DEBUG)Log.v(AppConstants.DEBUG_TAG," e.printStackTrace(): "+e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
我收到latitude并且longitude价值正确,但我无法理解为什么它会抛出exception,我也做了谷歌搜索,但它无能为力.
任何人都可以详细解释一下吗?
我知道有时google后端服务可能无法使用.
因此,解决方案可能是循环,直到我获得数据.
private class getLocationDetails extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
Log.d("looping", "" + count + "");
count++;
double lat = Double.parseDouble(params[0]);
double lng = Double.parseDouble(params[1]);
List<Address> addresses = null;
try {
Geocoder gCoder = new Geocoder(ImageAndLocationActivity.this,
Locale.getDefault());
addresses = gCoder.getFromLocation(lat, lng, 1);
Address addr = addresses.get(0);
user_country = addr.getCountryName();
user_city = addr.getLocality();
user_district = addr.getSubAdminArea();
if (user_city == null) {
user_city = user_district;
}
} catch (Exception e) {
Log.e("Exception in getLocationDetails - ", …Run Code Online (Sandbox Code Playgroud) 我能够得到经度和纬度,但得到地址我得到了一个错误.
public boolean onTouchEvent(MotionEvent事件,MapView mapView)
{
if(event.getAction()==0)
{
GeoPoint p = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Geocoder geoCoder=new Geocoder(getBaseContext(),Locale.getDefault());
try
{
List<Address> address = geoCoder.getFromLocation( p.getLatitudeE6() / 1E6,
p.getLongitudeE6() / 1E6, 1);
String add="";
if(address.size()>0)
{
for (int i=0; i<address.get(0).getMaxAddressLineIndex();i++)
add += address.get(0).getAddressLine(i) + "\n";
}
Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
} catch (IOException e)
{
e.printStackTrace();
}
return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)
}
我的Logcat - >
02-14 12:27:35.717: WARN/System.err(452): java.io.IOException: Service not Available
02-14 12:27:35.727: WARN/System.err(452): at android.location.Geocoder.getFromLocation(Geocoder.java:117)
02-14 12:27:35.727: WARN/System.err(452): …Run Code Online (Sandbox Code Playgroud) 我在模拟器和我的手机(带有Android 4.1的Nexus S)上使用Geocoder.getLocationFromName()方法,我得到以下异常:
java.io.IOException: Service not Available
Run Code Online (Sandbox Code Playgroud)
关于这个问题有很多问题出现在模拟器上(示例),并且大多数人都说这是模拟器的特定版本存在问题.但是,我的AVD(2.3和4.1)和我的手机都出现了异常.
我的手机和AVD都有互联网连接.我的API版本是16(android 4.1),但我也尝试过较旧版本.两种AVD都包含Google API.
有什么想法在这里发生了什么?
这是相关的代码段:
Geocoder myGeocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
List<Address> newAddresses = myGeocoder.getFromLocationName(arg0.toString(), 10);
Run Code Online (Sandbox Code Playgroud)
这是我的表现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.asdasd" android:versionCode="6" android:versionName="1.3.1">
<uses-sdk android:minSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application android:icon="@drawable/ic_launcher_asdasd"
android:label="@string/app_name">
<activity android:name=".AsdasdActivity" android:label="@string/app_name"
android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud) 我必须通过坐标获得一个地址,但它不起作用并输出"无法获取地址":
public String GetAddress(String lat, String lon)
{
Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
String ret = "";
try {
List<Address> addresses = geocoder.getFromLocation(Double.parseDouble(lat), Double.parseDouble(lon), 1);
if(addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder("");
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
ret = strReturnedAddress.toString();
ret=ret.substring(0, ret.length() - 1);
}
else{
ret = "Unknown Address";
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
ret = "Couldn't get Address";
}
return ret;
} …Run Code Online (Sandbox Code Playgroud) 我有通话问题:
Geocoder geocoder = new Geocoder(ctx, Locale.getDefault());
List<Address> data = geocoder.getFromLocation(latitude, longitude, 1);
Run Code Online (Sandbox Code Playgroud)
抛出异常:
java.io.IOException: Service not Available
W/System.err: at android.location.Geocoder.getFromLocation(Geocoder.java:136)
W/System.err: at <path to my class>.getGeolocationName(GPSTracker.java:325)
Run Code Online (Sandbox Code Playgroud)
Nexus 5
Android 7.1.1 来自xda
Google 应用程序(Gapps),从“Aroma”变体从这里安装。Google Play、Google 服务会自动安装。我添加了谷歌地图,谷歌软件包安装程序。
重新启动设备不能解决问题,因为问题是关于缺少包 i 的事情。
更新
如果 Geocoder 不可用,我使用 e Geocoding API:示例
来自此处:“ Geocoder 是 Google API 附加组件的一部分,不属于 AOSP。 ”我可以安装它吗?
嗨,我写了一个应用程序,获取当前的纬度和经度,并将其转换为corrsponding address.i可以获得lattitude和longitutde但如何使用json将其转换为相应的地址.我是json的新手.我尝试了一些示例代码但没有获取地址
这是我的代码
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdate;
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.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.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.maps.GeoPoint;
public class GMapActivity extends FragmentActivity {
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener locListener = new GpsActivity(getBaseContext());
locManager.requestLocationUpdates( …Run Code Online (Sandbox Code Playgroud) android json geolocation reverse-geocoding google-maps-api-2
Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.ENGLISH);
try {
List<Address> addresses = geocoder.getFromLocation(lat,lon, 1); <--Exception
Run Code Online (Sandbox Code Playgroud)
此代码导致异常服务不可用.谁能帮我?我已经读过它是A 2.2的一个bug,api 10是A 2.3.3所以从理论上说它应该可行.
android ×9
geolocation ×2
google-maps ×2
coordinates ×1
geocoding ×1
gps ×1
java ×1
json ×1
service ×1