2017-08-07 107 views
-1

对不起,重复的问题,但我不能从以前的问题得到解决方案。我想在谷歌地图上从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) 
+0

添加您的logcat报告请 –

+0

添加崩溃日志质疑 – USKMobility

+0

哪里是你的'onMapReady()'方法,和其他Google Map生命周期方法?没有冒犯,但这个代码有一种气味。我的建议是:添加断点并精确定位代码崩溃的位置。 –

回答

0

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)))); 
    } 
+0

它正在工作,但现在的问题是在addMarker.Plz指南如何可以解决它..... 'mMap.addMarker(new MarkerOptions()。position(new LatLng(Double.parseDouble(longitude),Double.parseDouble纬度))));' –

+0

更新我的答案检查它 –

+0

非常感谢你这是工作.......... –

0

添加标记,一旦地图是准备在

((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)))); 
      } 
     }); 
相关问题