簡體   English   中英

Android Map始終為null

[英]Android Map always null

我試圖在片段中實現地圖,但似乎方法getMap()始終返回null 我已經嘗試過其他關於stackoverflow的解決方案,例如檢查導入並確保我使用了正確的xml類。 這些都不起作用。

((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap()

總是拋出錯誤。

08-02 13:39:16.801: E/AndroidRuntime(16502): FATAL EXCEPTION: main
08-02 13:39:16.801: E/AndroidRuntime(16502): Process: com.ideamovinganddelivery, PID: 16502
08-02 13:39:16.801: E/AndroidRuntime(16502): java.lang.RuntimeException: Unable to resume activity {com.ideamovinganddelivery/com.idealmovinganddelivery.MainActivity}: java.lang.NullPointerException
08-02 13:39:16.801: E/AndroidRuntime(16502):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3321)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3359)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at android.os.Looper.loop(Looper.java:157)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at android.app.ActivityThread.main(ActivityThread.java:5872)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at java.lang.reflect.Method.invokeNative(Native Method)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at java.lang.reflect.Method.invoke(Method.java:515)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at dalvik.system.NativeStart.main(Native Method)
08-02 13:39:16.801: E/AndroidRuntime(16502): Caused by: java.lang.NullPointerException
08-02 13:39:16.801: E/AndroidRuntime(16502):    at com.idealmovinganddelivery.mapfragment.MapsFragment.setUpMapIfNeeded(MapsFragment.java:119)
08-02 13:39:16.801: E/AndroidRuntime(16502):    at com.idealmovinganddelivery.mapfragment.MapsFragment.onResume(MapsFragment.java:87)

MapFragment Xml plus類

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_map_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.idealmovinganddelivery.MainActivity$" >

     <fragment
         android:id="@+id/map"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"

         class="com.idealmovinganddelivery.mapfragment.MapsFragment" />

</RelativeLayout>
////////////

import android.annotation.SuppressLint;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Context;
import android.graphics.Color;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;
import com.ideamovinganddelivery.R;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        setHasOptionsMenu(true) ;
        View view=inflater.inflate(R.layout.fragment_map, container,false);


        return view;

    }

      public void onResume() {
         super.onResume();
         setUpMapIfNeeded();
         map.setOnMarkerClickListener(this);

         }
     public  void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (map == null) {
            // Try to obtain the map from the SupportMapFragment.
            map = ((SupportMapFragment) getFragmentManager()
                    .findFragmentById(R.id.map)).getMap();
            // Check if we were successful in obtaining the map.
            if (map != null)
                setUpMap();
        }

    }

如果您要為3.0以上的設備提供地圖,請保持xml不變,但不要使用此行-

map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

寫這行

map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

對於3.0以下的設備,您必須將xml更改為以下形式-

<fragment
         android:id="@+id/map"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         class="com.idealmovinganddelivery.mapfragment.SupportMapFragment" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM