2016-05-23 90 views
0

我嘗試使用Geocoder與我的谷歌地圖。我可以從地點名稱中獲取緯度和經度。我的問題是我無法使用經緯度添加任何標記或將相機移動到該位置。每次它顯示空指針異常。但我以文本視圖的形式獲取經緯度。我已經使用所有權限,實際上Geocoder工作正常,但不是與谷歌地圖。 地理編碼器不能添加任何標記或移動到谷歌地圖上的那個地方?地理編碼器是否真正與谷歌地圖API P2工作?

我使用片段類,因爲導航抽屜,它有什麼可以創建此問題嗎?

如果任何機構有任何答案,這將是有益的。 如果有人問我可以發佈我的作品。 謝謝

這是我的片段類

public class GMapFragment extends Fragment implements OnMapReadyCallback{ 
    private GoogleMap googleMap; 
    MapFragment fragment; 
    EditText location_tf; 
    Button button; 
    List<Address> addressList; 
    Geocoder geocoder; 
    double lat; 
    double lng; 


     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 

      View rootView = inflater.inflate(R.layout.fragment_gmap, container, false); 
      location_tf = (EditText)rootView.findViewById (R.id.TFaddress); 

      button = (Button)rootView.findViewById(R.id.Bsearch); 
      button.setOnClickListener(buttonOnClickListener); 

      initilizeMap(); 
      return rootView;} 



       OnClickListener buttonOnClickListener = 
          new OnClickListener(){ 

     public void onClick(View v) 

     { 



      String location = location_tf.getText().toString(); 
      Geocoder geocoder = new Geocoder(getActivity(),Locale.ENGLISH); 
      List<Address> addressList = null; 
      try { 
       addressList = geocoder.getFromLocationName(location, 1); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Address address = addressList.get(0); 
      String locality= address.getLocality(); 
      Toast.makeText(getActivity(), locality, Toast.LENGTH_SHORT).show(); 

      lat = address.getLatitude(); 
      lng = address.getLongitude(); 

      LatLng ll = new LatLng(lat, lng); 
      googleMap.addMarker(new MarkerOptions()  //line 89 
      .position((ll))); 
      googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
        (ll), 15)); 


     } 
       } 
     ; 
     private void initilizeMap() 
     { 
      MapFragment fragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
       if (fragment != null){ 
        fragment.getMapAsync(this); 

       } 

     } 
     @Override 
     public void onMapReady(final GoogleMap googleMap) { 
      googleMap.setMyLocationEnabled(true); 
      googleMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
     } 

     @Override 
     public void onPause() { 

      final FragmentManager fragManager = this.getFragmentManager(); 
      final Fragment fragment = fragManager.findFragmentById(R.id.map); 
      if(fragment!=null){ 
       fragManager.beginTransaction().remove(fragment).commit(); 
      super.onPause(); 

      } 
     } 
     @Override 
     public void onDestroy() { 
      super.onDestroy(); 
      final FragmentManager fragManager = this.getFragmentManager(); 
      final Fragment fragment = fragManager.findFragmentById(R.id.map); 
      if(fragment!=null){ 
       fragManager.beginTransaction().remove(fragment).commit(); 
      } 
     } 
     } 

這是我的logcat

05-23 20:05:36.133: E/AndroidRuntime(10092): FATAL EXCEPTION: main 
05-23 20:05:36.133: E/AndroidRuntime(10092): Process: com.cubecode.mapdhaka, PID: 10092 
05-23 20:05:36.133: E/AndroidRuntime(10092): java.lang.NullPointerException 
05-23 20:05:36.133: E/AndroidRuntime(10092): at com.cubecode.mapdhaka.GMapFragment$1.onClick(GMapFragment.java:89) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at android.view.View.performClick(View.java:4472) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at android.view.View$PerformClick.run(View.java:18779) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at android.os.Handler.handleCallback(Handler.java:808) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at android.os.Handler.dispatchMessage(Handler.java:103) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at android.os.Looper.loop(Looper.java:193) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at android.app.ActivityThread.main(ActivityThread.java:5292) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at java.lang.reflect.Method.invokeNative(Native Method) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at java.lang.reflect.Method.invoke(Method.java:515) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
05-23 20:05:36.133: E/AndroidRuntime(10092): at dalvik.system.NativeStart.main(Native Method) 
+0

請後我已經發布了片段類的logcat相關的代碼 – pablobu

+0

。唯一的問題來自標記和移動相機。如果我不使用它們並使用文本視圖,我可以獲取經度和緯度。但我想添加標記到搜索的地方並將相機移動到該地點。這不可能@pablobu – Rakib07003

回答

0

GoogleMap的變量爲空,因爲你永遠不分配變量。

添加onMapReady:

this.googleMap = googleMap; 
+0

非常感謝你。我搜索了很多,但沒有得到任何解決方案。現在它正在工作 – Rakib07003

+0

如果你只看到onPause和onDestroy方法會很有幫助。我的onPause方法不起作用,當我試圖在我的應用程序的外部時,我在這個片段。當我回到我的片段時,我看不到地圖,如果我移動到其他片段,應用程序崩潰。有什麼我需要改變? @pablobu – Rakib07003

+0

你在那裏試圖用你的代碼存檔?你有沒有考慮過使用MapView? – pablobu