我想添加标记并在地图中的两个位置之间绘制折线。问题是当我尝试从Fragment类引用Googlemap时抛出异常。
就像这样,我有一个扩展Fragment类的类,并且使用普通的xml布局设置了fragment类的视图。此外,此布局包含一个片段,这是谷歌地图所在的位置。
以下是包含地图片段的片段布局代码;
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#ffffff"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="20dp"
>
<EditText
android:id="@+id/from"
android:layout_width="300dp"
android:layout_gravity="center"
android:hint="Enter the starting location"
android:layout_height="wrap_content"></EditText>
<Button
android:id="@+id/btn_showDirections"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:text="Show Directions"
android:layout_height="wrap_content" />
<fragment
android:layout_width="match_parent"
android:tag="HelloMap"
android:layout_height="300dp"
android:layout_margin="10dp"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
/>
</LinearLayout>
这是连接到给定布局文件的类
public class frg_planVisit_directionsToZoo extends Fragment {
GoogleMap mMap;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
try{
mMap = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
}
catch (Exception exp)
{
Log.i("Chin",exp.toString());
}
return inflater.inflate(R.layout.frg_planvisit_directions_to_zoo,container,false);
}
}
保存地图片段的片段连接到一个活动,它工作正常。在我获得对谷歌地图的引用的代码中引发了异常。
mMap = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
如果这是错的,有人可以帮我看一下地图的参考吗?我是Android的新手。
为方便起见,我会在堆栈跟踪中发布一些重要内容。
*12-17 04:00:24.533 19369-19369/com.android.ZooCeylon I/Chin﹕ java.lang.NullPointerException
12-17 04:00:25.423 19369-19374/com.android.ZooCeylon E/dalvikvm﹕ GC_CONCURRENT freed 359K, 8% free 13026K/14087K, paused 13ms+4ms, total 40ms
12-17 04:00:25.583 19369-19374/com.android.ZooCeylon E/dalvikvm﹕ GC_CONCURRENT freed 870K, 11% free 13647K/15239K, paused 7ms+15ms, total 64ms
12-17 04:00:26.013 19369-19369/com.android.ZooCeylon W/System.err﹕ Invalid int: ""
12-17 04:00:27.943 19369-19369/com.android.ZooCeylon I/Choreographer﹕ Skipped 207 frames! The application may be doing too much work on its main thread.
12-17 04:00:30.173 19369-19614/com.android.ZooCeylon W/System.err﹕ java.lang.NullPointerException*
答案 0 :(得分:0)
据我记得,map在一段时间后在后台线程上初始化。有一些回调。您可以使用谷歌示例或从您的ide创建地图活动来检查它应该如何完成。
答案 1 :(得分:-1)
正如Eugen Pechanec所说,首先需要在OnActivityCreate()
而不是OncreateView()
中移动代码,
此外,您必须确保手机上提供Google Play服务,否则您将获得GoogleMap null。您可以添加以下代码来检查是否安装了playservices。
if(map == null){
int isEnabled = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
if (isEnabled != ConnectionResult.SUCCESS) {
GooglePlayServicesUtil.getErrorDialog(isEnabled, getActivity(), 0);
}
}
else{
//Continue what you were doing.
}