2017-08-07 5 views
-1

申し訳ありませんが、繰り返し質問しても申し訳ありませんが、前の質問からの解決方法はありません。私はGoogleマップ上のmysqlからGPS(緯度、経度)をマップしたい。私はmysqlから緯度と経度を取得しますが、Googleマップにマップしようとすると、アプリがクラッシュします。私はたくさん試しましたが、うまくいきません。これはlogcatでgetMapAsync()メソッドを呼び出そうとするとアプリケーションがクラッシュする

ヌルオブジェクト参照

エラーを返します。これは、以前のヌル・オブジェクト参照の可能性は低いです。

マイクラス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

あなた 'onMapReady()'メソッドである場合 – USKMobility

+0

に疑問をクラッシュログを追加し、他のGoogleマップのライフサイクルメソッド?犯行はありませんが、このコードには匂いがあります。私のアドバイス:ブレークポイントを追加し、コードがどこでクラッシュするのかを正確に突き止める。 –

答えて

0

のように準備ができていたら、マーカーを追加します。は、このによって引き起こされる:

((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 

ではなくgetFragmentManagerSupportMapFragmentを使用してみてください:

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)))); 
      } 
     }); 
関連する問題