2017-04-06 11 views
-1

こんにちは私は、HTTPコールからそれらのデータを取得した後、Googleマップにポリゴンを描画しようとしています。HTTPリクエスト後にGoogleマップ上にポリゴンを描画する

以下
private void getZones() throws JSONException { 
     Request request = new Request.Builder().url(getString(R.string.main_url) + "/api/getZones") 
       .headers(buildStandardHeaders(Stormpath.accessToken())) 
       .get() 
       .build(); 

     okHttpClient.newCall(request).enqueue(new Callback() { 
      @Override public 
      void onFailure(Call call, IOException e) { 
       Log.d("DEBUG", "ERROR"); 
      } 
      @Override public void onResponse(Call call, Response response)throws IOException { 
       try { 
        JSONArray responseArray = new JSONArray(response.body().string()); 
        zones = new ArrayList<ZoneData>(); 
        for (int i=0; i < responseArray.length(); i++) { 
         db.addZone(new ZoneData(responseArray.getJSONObject(i))); 
         zones.add(new ZoneData(responseArray.getJSONObject(i))); 
        } 
        isTrackingServiceRunning = startService(new Intent(ActivityMain.this, ServiceTracking.class)); 
        bindService(new Intent(ActivityMain.this, ServiceTracking.class), trackerServiceConnection, Context.BIND_AUTO_CREATE); 
        drawAreasOnDashboard(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       }; 
      } 
     }); 
    } 

が、私は私の領域を描画しようとする方法です:

ここ
FATAL EXCEPTION: OkHttp Dispatcher 
Process: com.example.rtuya.secmerev2, PID: 1011                  
java.lang.IllegalStateException: Not on the main thread 

は、私は私のHTTP呼び出しを行い、その後、私は私の領域を描画しようとする方法をどのようにある:私はいつも同じエラーが出ます

public void drawAreas() { 
     int polygoneFillingIndex = 1; 
     if(ActivityMain.zones != null) { 
      for (ZoneData zone : ActivityMain.zones) { 
       int color; 
       if ((polygoneFillingIndex % 2) == 0) { 
        color = R.color.polygoneFillingBlue; 
       } else { 
        color = R.color.polygoneFilingGreen; 
       } 
       areasMap.addPolygon(new PolygonOptions() 
         .add(zone.getP1(), zone.getP2(), zone.getP3(), zone.getP4()) 
         .strokeColor(ResourcesCompat.getColor(getResources(), R.color.polygoneStroke, null)) 
         .fillColor(ResourcesCompat.getColor(getResources(), color, null)) 
         .zIndex(Float.valueOf(zone.getPosititionInArray())) 
         .clickable(true)); 

       polygoneFillingIndex++; 
      } 
     } 
    } 

答えて

1

エラーログには、間違っている箇所が正確に記載されています。 Androidではメインスレッドでhttp要求を実行することができないため、ブロックされません。 これらのHTTP要求をAsyncTasksにカプセル化する必要があります。ここでたくさんの例が見つかりました。

+0

私はそれを得ましたが、私はasynch takを使用したことがありませんでした。 –

+0

ここに例があります:https://www.google.it/amp/s/androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/amp/ onPostExecute()関数が実行されていますメインスレッドであなたに描画を実行することができます –

関連する問題