2017-05-31 4 views
1

Googleマップを統合してアクティビティの特定の場所を表示しようとしていますが、ResortDetailsは自分のDBから受け取った値の緯度と経度を表示しますが、できません。ここに私のJavaコードは次のとおりです。私のカスタムアクティビティでのGoogleマップ

public class ResortDetails extends AppCompatActivity implements View.OnClickListener, OnMapReadyCallback{ 

private GoogleMap mMap; 
protected void onCreate(Bundle savedInstanceState) { 
     try { 
     // Loading map 
     initializeMap(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private void initializeMap() { 
    if (mMap == null) { 
     SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFrag.getMapAsync(this); 

     // check if map is created successfully or not 
     if (mMap == null) { 
      Toast.makeText(getApplicationContext(), 
        "Sorry! unable to create maps", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } 
} 

MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title(res_name); 
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(latitude, longitude)).zoom(12).build(); 

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

public void setUpMap(){ 

    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    mMap.addMarker(marker); 
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
    //mMap.setMyLocationEnabled(true); 
    mMap.setTrafficEnabled(true); 
    mMap.setIndoorEnabled(true); 
    mMap.setBuildingsEnabled(false); 
    mMap.getUiSettings().setZoomControlsEnabled(true); 
} 

それは、常にトーストで終わる:Sorry! unable to create maps

私のXMLファイルには、私がやったように、フラグメントのレイアウトを選択するために、私にエラーを与えていました。ここでResortDetailsのためのXMLファイルには、次のとおりです。

`<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:weightSum="1" 
app:layout_collapseParallaxMultiplier="1.0" 
app:layout_scrollFlags="scroll"> 

<TextView 
    android:id="@+id/res_n" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal|center" 
    android:gravity="top|center_vertical|center_horizontal" 
    android:textSize="28sp" /> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1.00"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingBottom="10dp" 
      android:paddingLeft="20dp" 
      android:paddingRight="20dp" 
      android:paddingTop="10dp" 
      android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

     <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/map" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="245dp" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:padding="20dp" 
      android:paddingBottom="10dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:paddingTop="15dp" 
      tools:context="com.tripoffbeat.ResortDetails" 
      tools:layout="@layout/activity_maps" /> 


    </LinearLayout> 
</ScrollView> 

<Button 
    android:id="@+id/back" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal" 
    android:padding="10dp" 
    android:paddingBottom="10dp" 
    android:paddingEnd="10dp" 
    android:paddingStart="10dp" 
    android:paddingTop="10dp" 
    android:text="Back" /> 

</LinearLayout>` 

私はフラグメントのレイアウトとして@layout/activity_maps使用し、それはそれでマップビューが含まれています。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.google.android.gms.maps.MapView 
    android:id="@+id/mapView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

は、私が選択したレイアウトが正しいか、私はこれを作っています方法が正しいかどうかである場合には、あまりにもよく分かりません。私を助けてください。

+1

マップアクティビティを使用するようにしてください。私の友だちは、クエリの際に私に尋ねます。 –

+0

しかしマップアクティビティプリセットではなく自分のアクティビティでマップを使いたいと思います。 @NileshRathod –

+0

このリンクにアクセスしてください: - > https://stackoverflow.com/questions/18206615/how-to-use-google-map-v2-inside-fragment –

答えて

1

Google for Mapsの最新のアップデートでは、MapViewのみがフラグメントでサポートされています。 MapFragment & SupportMapFragmentが機能しません。私は間違っているかもしれませんが、これはMapFragment & SupportMapFragmentを実装しようとした後に見たものです。

マップを表示するためのレイアウトを設定します。 location_fragment.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<com.google.android.gms.maps.MapView 
    android:id="@+id/mapView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</RelativeLayout> 

今、私たちは地図を表示するためのJavaクラスをコーディングします。 MapViewFragment

public class MapViewFragment extends Fragment { 

MapView mMapView; 
private GoogleMap googleMap; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.location_fragment, container, false); 

    mMapView = (MapView) rootView.findViewById(R.id.mapView); 
    mMapView.onCreate(savedInstanceState); 

    mMapView.onResume(); // needed to get the map to display immediately 

    try { 
     MapsInitializer.initialize(getActivity().getApplicationContext()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    mMapView.getMapAsync(new OnMapReadyCallback() { 
     @Override 
     public void onMapReady(GoogleMap mMap) { 
      googleMap = mMap; 

      // For showing a move to my location button 
      googleMap.setMyLocationEnabled(true); 

      // For dropping a marker at a point on the Map 
      LatLng sydney = new LatLng(-34, 151); 
      googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description")); 

      // For zooming automatically to the location of the marker 
      CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build(); 
      googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
     } 
    }); 

    return rootView; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mMapView.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mMapView.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mMapView.onDestroy(); 
} 

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
    mMapView.onLowMemory(); 
} 

}

最後に、あなたはGoogle Cloud Consoleであなたのアプリを登録することで、アプリのAPIキーを取得する必要があります。アプリをネイティブAndroidアプリとして登録する

+0

これを実行した後、私はResortDetailsクラスにMapViewFragmentのオブジェクトを含めるか、これはResortDetailsクラスのマップを直接実装しますか?@Nilesh –

+0

このコードを使用すると、MapViewを任意のViewPagerまたはフラグメントまたはアクティビティの中のどこにでも設定できます。 –

+0

* Google Maps for Mapsの最新のアップデートでは、MapViewのみがフラグメントでサポートされています。 MapFragmentとSupportMapFragmentは動作しません。* **どうやってこれを取得しましたか?*私は間違っているかもしれませんが、これはMapFragmentとSupportMapFragmentを実装しようとした後に見たものです。** **ええ、あなたは間違っています** – Selvin