2016-05-20 13 views
0

私のアプリケーションはURLからJSONを取得し、ユーザーの場所から選択したマーカーの場所への方向を解析します。 デバッグでは、マップにポリラインを追加したときにアプリケーションが停止する方法で、送り先と送り元が正しいことがわかります。ここでは、コードは次のとおりです。Androidポリラインをマップエラーに追加する

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. に実装されています。エラーはどこですか?

+0

あなたの 'mMap'に' PolylineOptions'を追加するためのコードを試しました。 'src'と' dest'をハードコードされた 'LatLng'sに変更しました。このエラーを引き起こす原因が他にもあるかもしれません。あなたは 'src'と' dest'で得た値のログを追加しようとしましたか?さらにスニペットとフルログを投稿できる場合に役立ちます。 –

+0

2 LatLongを強制しようとしますが、うまくいきません。どうしたの?ハードコーディングではどういう意味ですか?ところで、私はAsynchタスクからJsonを取得し、次にメソッドiが雇用されたメインアクティビティに値を渡します。私はそれがスレッドの問題だと思っていますが、何をすべきか分かりません。 –

+0

'.add()'を '.add(new LatLng(-34,151)、new LatLng(-34,151.1))'コードを実行しました。私が地図をチェックしたとき(座標はSydney、Auの近く)、私はその線を見る。あなたは 'src'と' dest'を得るログを入れてみましたか?正しい値を取得しているかどうか確認してください。 –

答えて

2

メインスレッドからではなく、あなたの要求に必要なasynctaskのdoInBackgroundからUIを変更しようとしているため、例外が発生します。 この

runOnUiThread(new Runnable() { 

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

のようなものにあなたのコードをカプセル化してみたり、あなたのデータはあなたのdoInBackgroundから返さ取得し、OnPostExecuteでポリラインを追加するには、それを処理します。

+0

ありがとう、私はあなたにcoffeを借りています。今は問題なく動作します。 –

関連する問題