2016-06-11 9 views
1

私は2つのクラスを持っています。最初のクラスは、マップを管理するために、いくつかの道具を持っており、その中に私はすべてのメソッドのovverrideやった:私はからの取得データに使用第二のクラスを実装し、このクラス内 Androidマップ:マーカーを追加

public class Principal extends AppCompatActivity implements 
    OnMapReadyCallback, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener, 
    GoogleMap.OnMarkerDragListener, 
    GoogleMap.OnMapLongClickListener, 
    View.OnClickListener { 

     //Our Map 
      public GoogleMap mMap; 

      ... 

      class PostAsync extends AsyncTask<String, String, JSONObject> { 

        ... 

      } 
} 

を私のデータベース。

class PostAsync extends AsyncTask<String, String, JSONObject> {} 

データベースは、このクラス内で、いくつかの座標を返し、Iプリンシパルクラスのマップにいくつかのマーカーを追加する必要があります。 問題:PostAsyncクラスからマーカーを追加できません。どうすればいいですか?

ありがとうございました。

答えて

1
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

} 

class PostAsync extends AsyncTask<String, String, JSONObject> { 

    @Override 
    protected void onPostExecute(JSONObject jsonObject) { 

     ... // parse json 

     MarkerOptions markerOptions = new MarkerOptions(); 
     LatLng latLng = new LatLng(20, 30); 
     mMap.addMarker(markerOptions 
       .position(latLng) 
       .title("Title") 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); 

       ... 
    } 
} 

このようにお試しいただけますか?

+0

'doInBackground'は、バックグラウンドスレッドで呼び出されると' Markers'は本体のみ(UI)上のマップに追加することができます糸。あなたはこれを実行する '例外'を受け取ります – antonio

+0

ああ私はそれを試していない、コメントありがとうございました。 –

+0

私はonPostExecute()にマーカーを追加すると正常に動作します、ありがとうございます – Jay

1

マーカーはメイン(UI)スレッドに追加でき、onPostExecuteメソッドはAsyncTaskのメイン(UI)スレッドを実行できます。

だから、あなたのPostAsyncクラス(extends AsyncTask<String, String, JSONObject>)のあなたの定義によれば:

class PostAsync extends AsyncTask<String, String, JSONObject> { 

    // ... 

    protected void onPostExecute(JSONObject result) { 
     // Decode your JSONObject and add Markers to the map here 
    } 
} 
+0

ありがとう、それは非常にうまく動作します、私はマーカーがonPostExecute()にのみ追加できるかどうかはわかりませんでした。 Se sei italiano、grazie! – Jay

+0

マーカーは 'onPostExecute'だけでなく' onPreExecute'と 'onProgressUpdate'にも追加できます。これらのメソッドはメイン(UI)スレッド上で実行されるからです。 Sono Spagnolo。 Prego :) – antonio

+0

また、この解決策があなたの問題を解決した場合は、受け入れられた回答とマークして他の人を助けることを検討してください。 – antonio

関連する問題