尝试调用getMapAsync()方法时应用程序崩溃
对不起,重复的问题,但我不能从以前的问题得到解决方案。我想在谷歌地图上从MySQL映射GPS(纬度,经度)。我从MySQL获得纬度和长度,但当我尝试在谷歌地图上映射它时,我的应用程序崩溃。我尝试了很多,但它不工作。它返回尝试调用getMapAsync()方法时应用程序崩溃
空对象引用
错误logcat中。它不可能是以前的空对象引用。
我的班级RecGPS代码在这里。
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))));
}
}
我.XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_rec_gps"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.hp.getgpscoordinates.RecGPS">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="400dp">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
android:clickable="true"
android:name="com.google.android.gms.maps.SupportMapFragment"
/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn"/>
</LinearLayout>
logcat的
Attempt to invoke virtual method 'void com.google.android.gms.maps.MapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference
at com.example.hp.getgpscoordinates.RecGPS.showJSON(RecGPS.java:92)
at com.example.hp.getgpscoordinates.RecGPS.access$200(RecGPS.java:25)
at com.example.hp.getgpscoordinates.RecGPS$2.onResponse(RecGPS.java:56)
at com.example.hp.getgpscoordinates.RecGPS$2.onResponse(RecGPS.java:52)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
的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))));
}
它正在工作,但现在的问题是在addMarker.Plz指南如何可以解决它..... 'mMap.addMarker(new MarkerOptions()。position(new LatLng(Double.parseDouble(longitude),Double.parseDouble纬度))));' –
更新我的答案检查它 –
非常感谢你这是工作.......... –
添加标记,一旦地图是准备在
((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))));
}
});
添加您的logcat报告请 –
添加崩溃日志质疑 – USKMobility
哪里是你的'onMapReady()'方法,和其他Google Map生命周期方法?没有冒犯,但这个代码有一种气味。我的建议是:添加断点并精确定位代码崩溃的位置。 –