Android 尝试调用getMapAsync()方法时应用程序崩溃
很抱歉重复了这个问题,但我无法从前面的问题中得到答案。我想从谷歌地图上的mysql映射GPS(纬度、经度)。我从mysql获得了lat和long,但当我试图在谷歌地图上映射它时,我的应用程序崩溃了。我试了很多,但都不管用。它回来了 空对象引用 logcat中的错误。以前的空对象引用可能不存在 我的班级代码在这里Android 尝试调用getMapAsync()方法时应用程序崩溃,android,mysql,google-maps,google-maps-markers,Android,Mysql,Google Maps,Google Maps Markers,很抱歉重复了这个问题,但我无法从前面的问题中得到答案。我想从谷歌地图上的mysql映射GPS(纬度、经度)。我从mysql获得了lat和long,但当我试图在谷歌地图上映射它时,我的应用程序崩溃了。我试了很多,但都不管用。它回来了 空对象引用 logcat中的错误。以前的空对象引用可能不存在 我的班级代码在这里 public class RecGPS extends AppCompatActivity{ private GoogleMap mMap; Button btn;
public class RecGPS extends AppCompatActivity{
private GoogleMap mMap;
Button btn;
private ProgressDialog loading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rec_gps);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recGps();
}
});
}
private void recGps() {
loading = ProgressDialog.show(this, "Please wait ......", "fetching....", false, false);
String url = Config.URL_CARD_INFO;
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
loading.dismiss();
showJSON(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(RecGPS.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void showJSON(String response) {
String latitude = "";
String longitude = "";
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY);
JSONObject collegeData = result.getJSONObject(0);
latitude = collegeData.getString(Config.TAG_ISSUE_DATE);
longitude = collegeData.getString(Config.TAG_Expiry_DATE);
} catch (JSONException e) {
e.printStackTrace();
}
Toast.makeText(this,latitude+longitude,Toast.LENGTH_LONG).show();
// ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
mMap=googleMap;
}
});
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(longitude), Double.parseDouble(latitude))));
}
}
地图准备就绪后添加标记,如中所示
((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
mMap=googleMap;
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(longitude), Double.parseDouble(latitude))));
}
});
NullPointerException
是由以下原因引起的:
((MapFragment) getFragmentManager().findFragmentById(R.id.map))
尝试使用SupportMapFragment
而不是getFragmentManager
:
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(longitude), Double.parseDouble(latitude))));
}
将您的logcat报告pleaseAdd崩溃日志添加到问题中,您的
onMapReady()
方法和其他Google地图生命周期方法在哪里?无意冒犯,但这代码有味道。我的建议:添加断点并精确定位代码崩溃的位置。@Oussemaroua请立即检查它的可能副本是否正在工作,但现在问题出在addMarker中。Plz指南如何解决它mMap.addMarker(新的MarkerOptions().position(新的LatLng(Double.parseDouble(经度)、Double.parseDouble(纬度)))代码>
((MapFragment) getFragmentManager().findFragmentById(R.id.map))
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(longitude), Double.parseDouble(latitude))));
}