Click here to Skip to main content
15,886,362 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
my app work fine but when i'm trying to reclick the current running fragment from navigation drawer. my app crashes. it only happens in one fragment. MAP fragment. i got the error in onResume method.
here is my code
Java
package com.munawwar.sultan.NavDrawer;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.munawwar.sultan.R;

import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;

import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.InflateException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MapzFragment extends Fragment implements LocationListener {
private GoogleMap mMap;
private LocationManager locationManager;

View view;

public MapzFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    if (view != null) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null)
            parent.removeView(view);
    }
    try {
        view = inflater.inflate(R.layout.fragment_mapz, container, false);
    } catch (InflateException e) {
        /* map is already there, just return view as it is */
    }
    return view;
}

/*
 * RelativeLayout theLayout = (RelativeLayout) inflater.inflate(
 * R.layout.fragment_mapz, container, false); return theLayout; }
 */
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

} // ending on activity created

@Override
public void onResume() {
    super.onResume();
    setUpMapIfNeeded();
}

private void setUpMapIfNeeded() {
    if (mMap != null) {
        return;
    }
    mMap = ((MapFragment) getActivity().getFragmentManager()
            .findFragmentById(R.id.map)).getMap();

    // Enabling MyLocation Layer of Google Map
    mMap.setMyLocationEnabled(true);

    // Getting LocationManager object from System Service LOCATION_SERVICE
    locationManager = (LocationManager) getActivity().getSystemService(
            Context.LOCATION_SERVICE);

    // Creating a criteria object to retrieve provider
    Criteria criteria = new Criteria();

    // Getting the name of the best provider
    String provider = locationManager.getBestProvider(criteria, true);

    // provider = locationManager.getBestProvider(criteria, false);
    // Getting Current Location
    Location location = locationManager.getLastKnownLocation(provider);
    // ***************current location*******************
    if (location != null) {
        onLocationChanged(location);
    }
    // location update
    locationManager.requestLocationUpdates(provider, 2000, 0,
            (LocationListener) this);
    // ****************map*************************
    if (mMap == null) {
        return;
    }

    // Initialize map options. For example:
    // mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

    mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
    // ***********RADIO BUTTONS FOR CHANGING MAP************
    RadioGroup rgViews = (RadioGroup) getActivity().findViewById(
            R.id.rg_views);
    rgViews.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (checkedId == R.id.rb_hybrid) {
                mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            } else if (checkedId == R.id.rb_satellite) {
                mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                mMap.setTrafficEnabled(true);
            } else if (checkedId == R.id.rb_terrain) {
                mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
                mMap.setTrafficEnabled(true);
            }
        }
    });

}

// *********on location listener implemented functions
@Override
public void onProviderDisabled(String provider) {
    Toast.makeText(MapzFragment.this.getActivity(),
            "Disabled provider " + provider, Toast.LENGTH_SHORT).show();
}

@Override
public void onProviderEnabled(String provider) {
    Toast.makeText(MapzFragment.this.getActivity(),
            "Enabled new provider " + provider, Toast.LENGTH_SHORT).show();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
}

@Override
public void onLocationChanged(Location location) {

    // Getting latitude of the current location
    double latitude = location.getLatitude();

    // Getting longitude of the current location
    double longitude = location.getLongitude();

    // Creating a LatLng object for the current location
    LatLng latLng = new LatLng(latitude, longitude);

    // Showing the current location in Google Map
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    // Zoom in the Google Map
    mMap.animateCamera(CameraUpdateFactory.zoomTo(15));

}


@Override
public void onDestroyView() {

    Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
    FragmentTransaction ft = getActivity().getFragmentManager()
            .beginTransaction();
    ft.remove(fragment).commit();
    super.onDestroyView();
}

}

And this is the error i got.................................................................................................................................................
12-15 01:25:10.004: E/AndroidRuntime(24087): FATAL EXCEPTION: main
12-15 01:25:10.004: E/AndroidRuntime(24087): java.lang.NullPointerException
12-15 01:25:10.004: E/AndroidRuntime(24087):    at com.munawwar.sultan.NavDrawer.MapzFragment.setUpMapIfNeeded(MapzFragment.java:127)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at com.munawwar.sultan.NavDrawer.MapzFragment.onResume(MapzFragment.java:68)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:874)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.app.BackStackRecord.run(BackStackRecord.java:635)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at  android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.os.Handler.handleCallback(Handler.java:615)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.os.Looper.loop(Looper.java:153)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at android.app.ActivityThread.main(ActivityThread.java:4987)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at java.lang.reflect.Method.invokeNative(Native Method)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at java.lang.reflect.Method.invoke(Method.java:511)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
12-15 01:25:10.004: E/AndroidRuntime(24087):    at dalvik.system.NativeStart.main(Native Method)
Posted
Updated 15-Dec-14 2:40am
v2
Comments
Richard MacCutchan 15-Dec-14 7:16am    
Please format your code properly and indicate where the error occurs.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900