Android添加折线以映射错误

时间:2016-05-20 07:00:27

标签: android google-maps polyline

我的应用程序从URL检索JSON并解析从用户位置到所选标记位置的路线。 调试显示目标和源是正确的,当我在地图中添加折线时,应用程序卡住的方式。这是代码:

for(int z = 0; z<list.size()-1;z++){
    LatLng src= list.get(z);
    LatLng dest= list.get(z+1);

    PolylineOptions line=  new PolylineOptions()
        .add(src, dest)
        .width(2)
        .color(Color.BLUE).geodesic(true);
        mMap.addPolyline(line);
}

这是编辑过的logcat:

05-20 11:44:04.698 26190-27044/com.example.marco.progettoquinta E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
  Process: com.example.marco.progettoquinta, PID: 26190
  java.lang.RuntimeException: An error occurred while executing doInBackground()
      at android.os.AsyncTask$3.done(AsyncTask.java:309)
      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
      at java.lang.Thread.run(Thread.java:818)
   Caused by: java.lang.IllegalStateException: Not on the main thread
      at maps.f.g.b(Unknown Source)
      at maps.z.D.a(Unknown Source)
      at maps.ag.t.a(Unknown Source)
      at uz.onTransact(:com.google.android.gms.DynamiteModulesB:137)
      at android.os.Binder.transact(Binder.java:387)
      at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addPolyline(Unknown Source)
      at com.google.android.gms.maps.GoogleMap.addPolyline(Unknown Source)
      at com.example.marco.progettoquinta.MapsActivity.drawPath(MapsActivity.java:210)
      at com.example.marco.progettoquinta.JSONParser.getJSONFromUrl(JSONParser.java:80)
      at com.example.marco.progettoquinta.JSONParser.doInBackground(JSONParser.java:35)
      at com.example.marco.progettoquinta.JSONParser.doInBackground(JSONParser.java:18)
      at android.os.AsyncTask$2.call(AsyncTask.java:295)
      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
      at java.lang.Thread.run(Thread.java:818) 

它说来源不明,但实际上是正确的。 当然这个方法是在AsyncTask.中实现的 错误在哪里?

1 个答案:

答案 0 :(得分:2)

您的异常发生是因为您尝试修改UI不是来自主线程,而是来自asynctask的doInBackground(这是您的请求所必需的)。 尝试将代码封装成类似

的代码
runOnUiThread(new Runnable() {

   @Override
   public void run()
   {
      //do your loop adding polyline
   }
});

或从doInBackground返回您的数据并处理它以在OnPostExecute中添加折线。