こんにちは、Androidプログラミングは初めてで、ユーザーが国をクリックすると、別のアクティビティを開始して、首都を示すマーカーが付いた地図を表示するアプリがあります。
しかし、非同期タスクメソッドから資本を取得する必要があるため、国情報を返す必要があり、マップを更新する必要があります。onPostExecuteでマップ更新メソッドを呼び出しましたが、アプリがクラッシュしますか?
作成中
mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync( this);
new GetCountryDetails().execute(selectedCountry);
次に、非同期タスクで
private class GetCountryDetails extends AsyncTask<String, String, CountryInfo> {
@Override
protected CountryInfo doInBackground(String... params) {
CountryInfo countryInfo = null;
私のonPostExecuteで
protected void onPostExecute(CountryInfo countryInfo) {
countryCapital=countryInfo.getCapital();
updateMap(map);//doesn't work here
onMapReady:
public void onMapReady(GoogleMap map) {
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
map.getUiSettings().setMapToolbarEnabled(true);
updateMap
public void updateMap(GoogleMap map){
LatLng capitalCity = getCityLatitude(this, countryCapital);
map.moveCamera(CameraUpdateFactory.newLatLng(capitalCity));
MarkerOptions marker = new MarkerOptions().position(capitalCity).title( countryCapital);
map.addMarker(marker);
}
どんな助けも感謝します!
私
回答 2 件
以下のコードスニペットは私にとって完璧に機能します。試してみてください。
private GoogleMap mMap; ArrayList<LatLngBean> arrayList; private ArrayList<LatLng> listLatLng;
onPostExecuteメソッドに以下のコードを追加します
LatLngBean bean = new LatLngBean(); bean.setTitle(jobj.getString("")); bean.setSnippet("Hello, " + jobj.getString("")); bean.setLatitude(jobj.getString("latitude")); bean.setLongitude(jobj.getString("longitude")); arrayList.add(bean); runOnUiThread(new Runnable() { @Override public void run() { mapFragment.getMapAsync(YourActivity.this); } });
次に、コードonMapReady()メソッドを追加します
@Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); if (arrayList.size() > 0) { try { listLatLng = new ArrayList<>(); for (int i = 0; i < arrayList.size(); i++) { final LatLngBean bean = arrayList.get(i); double lat = Double.parseDouble(bean.getLatitude()); double lon = Double.parseDouble(bean.getLongitude()); LatLng latLng = new LatLng(lat, lon); BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.salesman_map_icon); mMap.addMarker(new MarkerOptions() .position(latLng) .title(bean.getTitle()) .snippet(String.valueOf(i)) //.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE))); .icon(icon)); mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); mMap.animateCamera(CameraUpdateFactory.zoomTo(17)); LatLng object = new LatLng(lat, lon); listLatLng.add(object); } } catch (NumberFormatException e) { e.printStackTrace(); } } }
関連記事
- 更新後にZeus + Poseidonが実行されない
- AngularでAPIエンドポイントを変更した後にDOMを更新する
- 成功後のAJAX更新DataTable
- Ajax呼び出し後に値を同期的に更新する方法
- iOS 14のアップデート後、テキストフィールドでアプリがフリーズする
- axiosリクエスト後のvuejsの値更新遅延を修正するにはどうすればよいですか?
- GCを870428066に更新した後、ローカルホストでERR_CONNECTION_REFUSED
- Laravelのモデルのユーティリティはどこに置くべきですか?
- Firebase-アップデート後の機能エラー?私に何ができる?
- 順序を維持するために要素を挿入する必要がある最後のインデックスを見つける
関連した質問
- GoogleMaps CancelableCallbackは、カメラの角度と位置を変更しません。私は何が間違っているのですか?
- 電卓アプリでDecimalFormatのエラーを解決する方法
- Android(Kotlin):オブザーバーのタイプの不一致
- Androidプロジェクトで使用されるJARからのロギング
- NordicThingy:52を使用したAndroid BluetoothGATTタイムアウト
- 応答を処理するKotlinRetrofit
- 作成中のスレッドがデーモンである場合に限り、Javaスレッドはデーモンですか?
- AlertDilogからMainActivtyにデータリターンを渡します
- RectFがCanvasの境界線から外れます
- (解決済み)デフォルトのandroid RecyclerView ViewHolder NPE shouldIgnore()