Har*_*eet 1 android android-mapview
我正在尝试使用"位置名称"(即"国家/地区名称")将MapView中的动画设置为某个位置.我得到了例外:

如果你看不到pic那么异常是:: IOException:服务不可用有错误无法获得连接工厂客户端.
我使用的代码如下:
public class ShowMapView extends MapActivity
{
MapView mapView;
MapController mapController;
String Country;
@Override
public void onCreate(Bundle bundleMap)
{
super.onCreate(bundleMap);
setContentView(R.layout.show_map);
mapView = (MapView)findViewById(R.id.MapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.setBuiltInZoomControls(true);
Intent intent = this.getIntent();
Country = intent.getStringExtra("Country");
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
Log.v("GEOCODER", geocoder.toString());
try
{
Log.v("MAP", "TRY BLOCK");
List<Address> address = geocoder.getFromLocationName(Country, 2);
Log.v("MAP", "Country: " + Country);
if(address.size() > 0)
{
Log.v("MAP", "GeoPoint p");
GeoPoint p = new GeoPoint((int)(address.get(0).getLatitude() * 1E6),
(int)(address.get(0).getLongitude() * 1E6));
Log.v("MAP", "L&L done");
mapController.animateTo(p); Log.v("MAP", "Animate to P");
mapView.invalidate(); Log.v("MAP", "Invalidate()");
}
}
catch(IOException e)
{
Log.v("MAP", "CATCH BLOCK");
e.printStackTrace();
}
}
@Override
protected boolean isRouteDisplayed()
{
Log.v("MAP", "ROUTE: false");
return false;
}
}
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.project.LawSource"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="com.google.android.maps"/>
<activity
android:name=".GetCountry"
android:label="@string/app_label" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ShowMapView"
android:label="@string/app_name">
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我按照本教程工作,但它无法正常工作.
如果我错过了什么,请告诉我.
我遇到的问题和本博客一样
希望有一个解决方案.
提前致谢,
HAPS.
StackOverflow上关于该异常的许多帖子,例如:服务不可用 - Geocoder Android.它根本不是您的代码的问题,Geocoder会根据服务器可用性不时抛出此异常.您需要处理该异常,可能会回到使用Google Places API,如以下评论所示:https://stackoverflow.com/a/9173488/429047
一旦你有你的GeoPoint,您可以使用MapController.animateTo(GeoPoint对象) - http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapController.html
一个简单的例子:
表现:
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="com.google.android.maps"/>
<activity
android:name=".TestGeocoderActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="<YOUR API KEY HERE>"
android:clickable="true"
android:drawingCacheQuality="auto"
android:enabled="true" >
</com.google.android.maps.MapView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
TestGeocoderActivity.java
package com.rd.TestGeocoder;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.util.Log;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
public class TestGeocoderActivity extends MapActivity {
/** Called when the activity is first created. */
MapView mapView;
MapController mapController;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String country = "Australia";
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
Intent intent = this.getIntent();
if (intent.getStringExtra("country") != null) {
country = intent.getStringExtra("country");
}
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
Log.v("GEOCODER", geocoder.toString());
try {
Log.v("MAP", "TRY BLOCK");
List<Address> address = geocoder.getFromLocationName(country, 2);
Log.v("MAP", "Country: " + country);
if (address.size() > 0) {
Log.v("MAP", "GeoPoint p");
GeoPoint p = new GeoPoint(
(int) (address.get(0).getLatitude() * 1E6),
(int) (address.get(0).getLongitude() * 1E6));
Log.v("MAP", "L&L done:"+p.toString());
mapController.animateTo(p);
Log.v("MAP", "Animate to P");
mapView.invalidate();
Log.v("MAP", "Invalidate()");
}
} catch (IOException e) {
Log.v("MAP", "CATCH BLOCK");
e.printStackTrace();
}
}
@Override
protected boolean isRouteDisplayed() {
Log.v("MAP", "ROUTE: false");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,您需要更改包名称并填写api密钥
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |