In meinem Android-Studio-Projekt habe ich zwei Aktivitäten: eine MapsActivity und die andere nur einfach.Google Maps: Erstelle Marker aus verschiedenen Klassen
Wenn ich auf die Karte klicke, wird die andere Aktivität gestartet, die aus einer Reihe von EditTexts (Textfeldern) besteht, mit denen der Benutzer benutzerdefinierte Eigenschaften für den Marker definieren kann. Wenn ich jedoch versuche, den Marker aus dieser Klasse zu erstellen, gibt Android Studio einen Fehler aus. Hier
ist der Code, MapsActivity.java:
package com.geekybrackets.virtualtourguide;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
public GoogleMap mMap;
double lat = 0;
double lon = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
public void onMapClick(LatLng latLng) {
lat = latLng.latitude;
lon = latLng.longitude;
startActivity(new Intent(MapsActivity.this, newMarker.class));
}
});
}
}
NewMarker.java (Aktivität in dem Benutzereigenschaften von Marker eintritt)
package com.geekybrackets.virtualtourguide;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class newMarker extends AppCompatActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_marker);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Button save_btn = (Button)findViewById(R.id.btn_save);
save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText editName = (EditText)findViewById(R.id.editName);
String marker_title = editName.getText().toString();
MapsActivity i = new MapsActivity();
i.mMap.addMarker(new MarkerOptions()
.position(new LatLng(i.lat, i.lon))
.title(marker_title));
i.mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(i.lat, i.lon)));
finish();
}
});
}
}
Dies ist der Fehler, den ich bekommen:
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference
at com.geekybrackets.virtualtourguide.newMarker$2.onClick(newMarker.java:42)
Wie könnte ich dieses Problem lösen? Jede Eingabe wird geschätzt :)
Vielen Dank für Ihre ausführliche Antwort. Wenn ich das Ergebnis erhalte, bekomme ich eine Absicht, aber ich bin mir nicht sicher, wie ich den "Titel" als Extra weitergeben soll. Die Dokumentation scheint auch nicht zu helfen. –
Kein Problem.Schau dir die Änderung an, um zu sehen, wie du deinen Titel weitergeben kannst. – npace
Ah, das klingt richtig, großartig! Danke für die Hilfe, Sir. –