-1

Sorry for repeat question but i cant get solution from previous questions. I want to map GPS (Latitude,Longitude) from mysql on google map. I get lat and long from mysql but when i try to map it on google map, my app crashes. I tried a lot but it is not working. It returns

null object reference

error in logcat. It is not likely to the previous null object reference.

My Class RecGPS Code is here.

    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))));



}

}

my .XML file

 <?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)
James Z
  • 12,209
  • 10
  • 24
  • 44
Nauman Shafique
  • 433
  • 1
  • 6
  • 15

2 Answers2

1

The NullPointerException is caused by this :

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

Try to use SupportMapFragment instead of 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))));
    }
Oussema Aroua
  • 5,225
  • 1
  • 24
  • 44
  • it is working but now problem is in addMarker.Plz guide how can solve it..... `mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(longitude), Double.parseDouble(latitude))));` – Nauman Shafique Aug 07 '17 at 15:09
0

Add marker once map is ready as in

((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))));
            }
        });
Rajan Kali
  • 12,627
  • 3
  • 25
  • 37