绘制在谷歌地图图形页面使用JSON一个路径 [英] Draw a Path in Google Maps Mapview Using Json

查看:129
本文介绍了绘制在谷歌地图图形页面使用JSON一个路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我指的是这个伟大的例子:<一href=\"http://stackoverflow.com/questions/11745314/why-retrieving-google-directions-for-android-using-kml-data-is-not-working-anymo/11745316#11745316\">See这里

我收到以下错误,我无法找到一个解决方案。请帮忙!
该NoSuchElementException异常被触发。在MainActivity我做的描述。在我的Andr​​oid舱单我还包括

 &LT;使用库机器人:名字=com.google.android.maps/&GT;

开始的MapView不久出现的应用程序(灰色模式),然后后突然出现的力量关闭对话框。

我的 MainActivity 的:

 公共类MainActivity扩展MapActivity {@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    MapView类MapView类=(图形页面)findViewById(R.id.mapview); //或者你可以用API密钥直接宣告它
    路线路线=方向(新的GeoPoint((int)的(26.2 * 1E6),(INT)(50.6 * 1E6)),新的GeoPoint((int)的(26.3 * 1E6),(INT)(50.7 * 1E6)));
    RouteOverlay routeOverlay =新RouteOverlay(路线,Color.BLUE);
    调用MapView.getOverlays()加(routeOverlay)。}私人路线指引(最终的GeoPoint开始,最终的GeoPoint DEST){
    分析器分析器;
    字符串jsonURL =htt​​p://maps.google.com/maps/api/directions/json?
    最后的StringBuffer SBUF =新的StringBuffer(jsonURL);
    sBuf.append(原产地=);
    sBuf.append(start.getLatitudeE6()/ 1E6);
    sBuf.append(,);
    sBuf.append(start.getLongitudeE6()/ 1E6);
    sBuf.append(&放大器;目的地=);
    sBuf.append(dest.getLatitudeE6()/ 1E6);
    sBuf.append(,);
    sBuf.append(dest.getLongitudeE6()/ 1E6);
    sBuf.append(与&amp;传感器=真放;模式=驾驶);
    解析器=新GoogleParser(sBuf.toString());
    路线R = parser.parse();
    返回ř;
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    。getMenuInflater()膨胀(R.menu.activity_main,菜单);
    返回true;
}@覆盖
保护布尔isRouteDisplayed(){
    // TODO自动生成方法存根
    返回false;
}
}

我activity_main.xml中:

 &LT;的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:工具=htt​​p://schemas.android.com/tool​​s
机器人:layout_width =match_parent
机器人:layout_height =match_parent&GT;&LT; com.google.android.maps.MapView
    机器人:ID =@ + ID / MapView的机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT机器人:可点击=真
    机器人:apiKey =.........................................../ &GT;&LT; / RelativeLayout的&GT;

Errolog 的:

  11月11日至19日:22:17.782:I / MapActivity(10703):处理网络更改通知:已连接
十一月11日至19日:22:17.782:E / MapActivity(10703):无法获取连接工厂客户端
十一月11日至19日:22:17.822:D / AndroidRuntime(10703):关闭VM
十一月11日至19日:22:17.822:W / dalvikvm(10703):主题ID = 1:螺纹未捕获的异常(组= 0x4001d5a0)退出
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):致命异常:主要
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):java.util.NoSuchElementException
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在java.util.ArrayList中$ ArrayListIterator.next(ArrayList.java:579)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.example.testjsongooglemap.RouteOverlay.redrawPath(RouteOverlay.java:90)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.example.testjsongooglemap.RouteOverlay.draw(RouteOverlay.java:60)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.google.android.maps.Overlay.draw(Overlay.java:179)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.google.android.maps.MapView.onDraw(MapView.java:530)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.View.draw(View.java:7014)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.drawChild(ViewGroup.java:1732)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.drawChild(ViewGroup.java:1730)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.View.draw(View.java:7017)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.widget.FrameLayout.draw(FrameLayout.java:357)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.drawChild(ViewGroup.java:1732)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.drawChild(ViewGroup.java:1730)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.View.draw(View.java:7017)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.widget.FrameLayout.draw(FrameLayout.java:357)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java:2054)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewRoot.draw(ViewRoot.java:1632)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.os.Handler.dispatchMessage(Handler.java:99)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.os.Looper.loop(Looper.java:150)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在android.app.ActivityThread.main(ActivityThread.java:4385)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在java.lang.reflect.Method.invokeNative(本机方法)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在java.lang.reflect.Method.invoke(Method.java:507)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:849)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
十一月11日至19日:22:17.872:E / AndroidRuntime(10703):在dalvik.system.NativeStart.main(本机方法)


解决方案

您想要做的就是把方法是什么方向()使用在另一个线程的AsyncTask ,因为你不能运行在UI线程网络方法。此外,使用 mapView.invalidate()以刷新(重绘覆盖)的图形页面,看后路由绘制它。

I'm refering to this great example: See here

I'm getting the following errors and I can't find a solution. Please help! The NoSuchElementException is fired. In the MainActivity I'm doing it as described. In my Android-Manifest I also include

<uses-library android:name="com.google.android.maps" />

After starting the application the mapview shortly appears (grey patterns) and then suddenly the force close dialog appears.

My MainActivity:

public class MainActivity extends MapActivity {



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MapView mapView = (MapView) findViewById(R.id.mapview); //or you can declare it directly with the API key
    Route route = directions(new GeoPoint((int)(26.2*1E6),(int)(50.6*1E6)), new GeoPoint((int)(26.3*1E6),(int)(50.7*1E6)));
    RouteOverlay routeOverlay = new RouteOverlay(route, Color.BLUE);
    mapView.getOverlays().add(routeOverlay);

}

private Route directions(final GeoPoint start, final GeoPoint dest) {
    Parser parser;
    String jsonURL = "http://maps.google.com/maps/api/directions/json?";
    final StringBuffer sBuf = new StringBuffer(jsonURL);
    sBuf.append("origin=");
    sBuf.append(start.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(start.getLongitudeE6()/1E6);
    sBuf.append("&destination=");
    sBuf.append(dest.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(dest.getLongitudeE6()/1E6);
    sBuf.append("&sensor=true&mode=driving");
    parser = new GoogleParser(sBuf.toString());
    Route r =  parser.parse();
    return r;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}
}

My activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<com.google.android.maps.MapView
    android:id="@+id/mapview" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:clickable="true"
    android:apiKey="..........................................." />

</RelativeLayout>

Errolog:

11-19 11:22:17.782: I/MapActivity(10703): Handling network change notification:CONNECTED
11-19 11:22:17.782: E/MapActivity(10703): Couldn't get connection factory client
11-19 11:22:17.822: D/AndroidRuntime(10703): Shutting down VM
11-19 11:22:17.822: W/dalvikvm(10703): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
11-19 11:22:17.872: E/AndroidRuntime(10703): FATAL EXCEPTION: main
11-19 11:22:17.872: E/AndroidRuntime(10703): java.util.NoSuchElementException
11-19 11:22:17.872: E/AndroidRuntime(10703):    at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:579)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.example.testjsongooglemap.RouteOverlay.redrawPath(RouteOverlay.java:90)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.example.testjsongooglemap.RouteOverlay.draw(RouteOverlay.java:60)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.google.android.maps.Overlay.draw(Overlay.java:179)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.google.android.maps.MapView.onDraw(MapView.java:530)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.View.draw(View.java:7014)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.View.draw(View.java:7017)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.View.draw(View.java:7017)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2054)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewRoot.draw(ViewRoot.java:1632)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.os.Looper.loop(Looper.java:150)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at android.app.ActivityThread.main(ActivityThread.java:4385)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at java.lang.reflect.Method.invokeNative(Native Method)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at java.lang.reflect.Method.invoke(Method.java:507)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
11-19 11:22:17.872: E/AndroidRuntime(10703):    at dalvik.system.NativeStart.main(Native Method)

解决方案

What you want to do is put the method directions() in another thread using AsyncTask because you cannot run network method over the UI thread. Also, use mapView.invalidate() in order to refresh (redraw the overlays) the MapView and see the route after drawing it.

这篇关于绘制在谷歌地图图形页面使用JSON一个路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆