0

I have some strange crash on app but i cant reproduce it for now. Here is the log:

java.lang.NullPointerException
   at oup.a()
   at oup.a()
   at oyf.a()
   at grl.onTransact(SourceFile:167)
   at android.os.Binder.transact(Binder.java:347)
   at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.getCameraPosition()
   at com.google.android.gms.maps.GoogleMap.getCameraPosition()
   at com.Parkable.showDetail(Parkable.java:220)
   at com.MapActivity.updateMap$1385ff(MapActivity.java:1496)
   at com.Parkable$Collection.onFetchCompletion(Parkable.java:731)
   at com.Facility$Collection$1.onFinish(Facility.java:859)
   at com.Facility$FetchTask.onPostExecute(Facility.java:825)
   at com.Facility$FetchTask.onPostExecute(Facility.java:597)
   at android.os.AsyncTask.finish(AsyncTask.java:631)
   at android.os.AsyncTask.access$600(AsyncTask.java:177)
   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5455)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:525)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
   at dalvik.system.NativeStart.main(NativeStart.java)

Parkable 220 line is

mapMarker = mapActivity.map.addMarker(options);

And two methods:

public void showDot(MapActivity mapActivity, Parkable parking) {
    if (mapMarker != null)
        throw new AssertionError("Marker already shown!");

    String snippet = "";

    if (ccAccepted())
        snippet = mapActivity.getString(R.string.cc_accepted);

    if (haveOccupancy)
        snippet += " • " + getOccupancyText();

    MarkerOptions options = new MarkerOptions();
    options.position(pos);
    options.title(getTitle());
    options.snippet(snippet);
    options.icon(getDotBitmapDescriptor(mapActivity, parking instanceof Facility));
    mapMarker = mapActivity.map.addMarker(options);
    visibleMarkers.put(mapMarker.getId(), this);
    dotShown = true;
}
public BitmapDescriptor getDotBitmapDescriptor(Activity context, final boolean isFacilityParking) {
    if (USE_RATE_COLOR_SCHEME && isFacilityParking) {
        return BitmapDescriptorFactory.fromBitmap(generateDot(context));
    }
    if (bitmapDescriptor != null)
        return bitmapDescriptor;

    String key = getMarkerId();

    bitmapDescriptor = bitmapDescriptorCache.get(key);
    if (bitmapDescriptor == null) {
        bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(generateDot(context));
        bitmapDescriptorCache.put(key, bitmapDescriptor);
    }

    return bitmapDescriptor;
}

Map fragment is

public class MapFragmentWithTouch extends MapFragment {

private static final String TAG = "SupportFragmentWithTouch";
private View originalContentView;
private GoogleMap map;
private MapMovementListener movementListener;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
    originalContentView = super.onCreateView(inflater, parent, savedInstanceState);
    TouchableWrapper touchView = new TouchableWrapper(getActivity());
    touchView.addView(originalContentView);
    map = getMap();

    return touchView;
}

@Override
public View getView() {
    return originalContentView;
}

public void setMapMovementListener(MapMovementListener movementListener) {
    this.movementListener = movementListener;
}

public void clearMapMovementListener() {
    this.movementListener = null;
}

public interface MapMovementListener {
    public void onMapMove(LatLng center);

    public void onMoveStart();

    public void onMoveStop();
}

private class TouchableWrapper extends FrameLayout {
    private boolean isMoving;

    public TouchableWrapper(Context context) {
        super(context);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (map == null)
            return super.dispatchTouchEvent(ev);

        LatLng center = map.getCameraPosition().target;

        if (movementListener != null) {
            movementListener.onMapMove(center);

            final int action = ev.getAction();
            switch (action & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_MOVE:
                if (!isMoving)
                    movementListener.onMoveStart();

                isMoving = true;
                break;

            case MotionEvent.ACTION_UP:
                if (isMoving)
                    movementListener.onMoveStop();

                isMoving = false;
                break;
            }
        }

        return super.dispatchTouchEvent(ev);
    }
}

}

And in main activity method that init map in OnResume:

private void setUpMapIfNeeded() {
    if (map != null)
        return;
    // Try to obtain the map from the MapFragment
    map = ((MapFragmentWithTouch)getFragmentManager().findFragmentById(R.id.map)).getMap();
    if (map != null)
        setUpMap();
}

Does anybody have this situation? Appreciate any help.

Magirus
  • 133
  • 1
  • 2
  • 12
  • show the showDot function being called – Nabin Aug 07 '14 at 10:40
  • 2
    map is not ready or fragment asociated is not correct instantiate, could you paste how you do that? – Xenione Aug 07 '14 at 10:42
  • see one of the object hasn't been initialized. Hard to tell from here – Nabin Aug 07 '14 at 10:43
  • anyway if it's just an edge case you can capture the NullPointerException in your Parkable and tell the user to retry the marker when map is ready, etc. – rupps Aug 07 '14 at 10:43
  • @Xenione Updated with map fragment – Magirus Aug 07 '14 at 11:31
  • ok, you are getting map from outside your fragment,aren't you? and map is still not initialized at the time you get it. I recommend to put all you are doing with the map inside the fragment and not in the activity – Xenione Aug 07 '14 at 11:40
  • http://stackoverflow.com/questions/19219255/supportmapfragment-getmap-returns-null as Xenione said sometimes getMap() method can return null – Peter Moskala Aug 07 '14 at 12:03
  • @Xenione Yes, i init map from MapFragmentWithTouch in activity that contains MapFragmentWithTouch. And onResume method inits my map. – Magirus Aug 07 '14 at 12:07
  • @PeterM. Nope. Seems to be its not getMap() method problem. I have removed any init of map and i hadn`t crash log like that. So the reason in smthing else. – Magirus Aug 07 '14 at 12:59

0 Answers0