2016-06-24 11 views
1

私は別の断片から地図上にマーカーを投稿しようとしています。あなたがボタンをタップすると、フラグメントマネージャーがあなたを地図の断片に連れて行き、新しく配置されたマーカーを表示します。しかし、私はいくつかの(nullPointer)問題があります。マーカーを別のフラグメントからGoogleマップに投稿するにはどうすればよいですか?

マップがロードされる前にマーカーを追加しようとしているため、nullポインタが表示されます。私はマップが準備ができているときにマーカーを追加する方法を見つけるためにいくつかの方法を試しましたが、何も動かすことができませんでした。

マップが準備されているときにマーカーを追加するクリーンなソリューションはありますか?

また、次のエラーが表示されます。 java.lang.NullPointerException:仮想メソッド 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMapを呼び出そうとしています。 .addMarker nullオブジェクト参照

EDIT上(com.google.android.gms.maps.model.MarkerOptions)」:私はマーカー情報(緯度経度)を取得しています方法は、私が見つけメソッドでありますスタックオーバーフロー。それは、EditTextからアドレスを取得し、そこから緯度と経度のポイントを取得します。私はそれを「マーカー」と「ポイント」に格納するために使用します。方法は以下にあります...

更新:これはもはや私にnull例外を与えません。 MapFragmentはロードされますが、表示されるマーカーはありません。

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    setUpSpinners(); 
    Button button = (Button) getActivity().findViewById(R.id.postButton); 
    button.setOnClickListener(
      new Button.OnClickListener() { 
       public void onClick(View v) { 
        EditText editEvent = (EditText) getActivity().findViewById(R.id.map_location); 
        point = getLocationFromAddress(getActivity() 
          .getApplicationContext(), editEvent.getText().toString()); 

        marker = new MarkerOptions().position(
          new LatLng(point.latitude, point.longitude)).title("New Marker"); 

        FragmentManager fm = getFragmentManager(); 
        fm.beginTransaction().replace(R.id.content_frag, new GoogleMapFragment()).commit(); 
       } 
      } 
    ); 
} 

public void addThisMarker(GoogleMap googleMap) { 
    googleMap.addMarker(marker 
      .position(point) 
      .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))); 
} 

そして、私のMapFragmentクラスで:私のPostFragmentクラスで

@Override 
public void onMapReady(GoogleMap googleMap) { 
    globalMap = googleMap; 
    setUpMap(); //just enabling some map properties here 
    PostFragment x = new PostFragment(); 

    x.addThisMarker(globalMap); 

} 

**そして、これは私がアドレスから緯度経度を取得するために、PostFragmentで、使用している方法であり、

public LatLng getLocationFromAddress(Context context, String strAddress) { 

    Geocoder coder = new Geocoder(context); 
    List<Address> address; 
    LatLng p1 = null; 

    try { 
     address = coder.getFromLocationName(strAddress, 5); 
     if (address == null) { 
      return null; 
     } 
     Address location = address.get(0); 
     location.getLatitude(); 
     location.getLongitude(); 

     p1 = new LatLng(location.getLatitude(), location.getLongitude()); 

    } catch (Exception ex) { 

     ex.printStackTrace(); 
    } 

    return p1; 
} 

答えて

1

あなたはこのようにそれを行うことができます。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // ... 
     MapFragment fMap = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
     fmap.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(final GoogleMap googleMap) { 
     map = googleMap; 

     // Draw your marker here 
    } 
} 
+0

私はそれを試みましたが、まだnullポインタの例外が発生しています。私は、私のポストフラグメント(ボタンだけのフラグメント)にマーカーを追加するメソッドを作りました。このメソッドはGoogleMapパラメーターを持っています。 そして、私はmap = googleMapを設定した場所の下にそのメソッドを置いています。 (パラメータに 'map'をつけて)。それでも私には同じ例外が与えられます。 – SaltySea

+0

コードを投稿できますか? – antonio

+0

ペーストビンに掲示してここにリンクしたり、ルールに違反していればいいのですか? – SaltySea

関連する問題