0
votes

I have an app which takes android map marker locations (lat/long) from mysql database. And user from my app can add markers too. The problem is that when user adds location of the new marker it does not appear on map. However the lat and long values appear in mysql database and if i reinstall the app it will show added location. Issue here seems to be that i have to refresh the map and i don't know how to do it in google maps v2. I found some answers that i should clear all markers and then load them again like this:

googleMap.clear(); 

But sadly it did not work. I found that in version one there was this method

map.invalidate();

Sadly in Google Maps v2 there is no such method. Has anyone have any idea how to refresh Google Maps v2 when i reactivate activity or if i press refresh button, any suggestion will be appreciated.

Update Code:

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.google.android.gms.maps.CameraUpdate;
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.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.wunderlist.slidinglayer.SlidingLayer;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import app.AppController;
import util.Content;

public class MainActivity extends Activity {


    private GoogleMap googleMap;

    // json object response url
    private String urlJsonObj = "alsodontneedthis.json";

    // json array response url
    private String urlJsonArry = "dontneedthis";




    private static String TAG = MainActivity.class.getSimpleName();

    // Progress dialog
    private ProgressDialog pDialog;

    Content content = new Content();
    public static String valueEntered;


    // temporary string to show the parsed response
    private String jsonResponse;

    private SlidingLayer mSlidingLayer;
    private TextView swipeText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.getUiSettings();
        googleMap.getUiSettings().setZoomControlsEnabled(true);




        bindViews();
        initState();

        mSlidingLayer.bringToFront();

        redirect();


        googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                mSlidingLayer.openLayer(true);
                return true;
            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    @SuppressLint("NewApi")
    @Override
    protected void onResume() {
        super.onResume();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);

        }
    }

    /**
     * View binding
     */
    private void bindViews() {
        mSlidingLayer = (SlidingLayer) findViewById(R.id.slidingLayer1);
//        swipeText = (TextView) findViewById(R.id.swipeText);
    }

    /**
     * Initializes the origin state of the layer
     */
    private void initState() {

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

        setupSlidingLayerPosition(prefs.getString("layer_location", "right"));

        setupShadow(prefs.getBoolean("layer_has_shadow", false));
        setupLayerOffset(prefs.getBoolean("layer_has_offset", false));
        setupPreviewMode(prefs.getBoolean("preview_mode_enabled", false));
    }

    private void setupSlidingLayerPosition(String layerPosition) {

        LayoutParams rlp = (LayoutParams) mSlidingLayer.getLayoutParams();
        int textResource;
        Drawable d;

//        if (layerPosition.equals("right")) {
            textResource = R.string.swipe_right_label;
            d = getResources().getDrawable(R.drawable.container_rocket_right);

            mSlidingLayer.setStickTo(SlidingLayer.STICK_TO_RIGHT);


        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
//        swipeText.setCompoundDrawables(null, d, null, null);
//        swipeText.setText(getResources().getString(textResource));
        mSlidingLayer.setLayoutParams(rlp);
    }

    private void setupShadow(boolean enabled) {
        if (enabled) {
            mSlidingLayer.setShadowSizeRes(R.dimen.shadow_size);
            mSlidingLayer.setShadowDrawable(R.drawable.sidebar_shadow);
        } else {
            mSlidingLayer.setShadowSize(0);
            mSlidingLayer.setShadowDrawable(null);
        }
    }

    private void setupLayerOffset(boolean enabled) {
        int offsetDistance = enabled ? getResources().getDimensionPixelOffset(R.dimen.offset_distance) : 0;
        mSlidingLayer.setOffsetDistance(offsetDistance);
    }

    private void setupPreviewMode(boolean enabled) {
        int previewOffset = enabled ? getResources().getDimensionPixelOffset(R.dimen.preview_offset_distance) : -1;
        mSlidingLayer.setPreviewOffsetDistance(previewOffset);
    }

    public void buttonClicked(View v) {
        switch (v.getId()) {
//        case R.id.buttonOpen:
//            mSlidingLayer.openLayer(true);
//            break;
        case R.id.buttonClose:
            mSlidingLayer.closeLayer(true);
            break;
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            if (mSlidingLayer.isOpened()) {
                mSlidingLayer.closeLayer(true);
                return true;
            }

        default:
            return super.onKeyDown(keyCode, event);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.addNewEvent:

                Intent intent = new Intent(this, AddEvent.class);
                startActivity(intent);
                ;
        }

        return true;
    }







    private void redirect() {


        //showpDialog();

        JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());


                        try {
                            Content content = new Content();
                            // Parsing json array response
                            // loop through each json object
                            jsonResponse = "";
                            for (int i = 0; i < response.length(); i++) {

                                JSONObject person = (JSONObject) response
                                        .get(i);

                                String name = person.getString("nosaukums");
                                String email = person.getString("nosaukums");
                                String relation = person.getString("nosaukums");

                                Double lat=person.getDouble("latCo");
                                Double lng=person.getDouble("longCo");


                                content.setName(name);

                                content.setPopulation(email);
                                content.setlat(lat);
                                content.setlng(lng);
                                content.setRelation(relation);
                                System.out.println("name="+content.getName()+content.getlat());
                                LatLng lt = new LatLng(content.getlat(), content.getlng());
                                content.setLatlng(lt);
                                //valueEntered=lt.toString();
                                System.out.println("address="+content.getLatlng());
                                        /*String home = latlng.getLong("home");
                                        String mobile = phone.getString("mobile");*/
                                System.out.println("relation="+content.getRelation());

                                jsonResponse += "Name: " + name + "\n\n";
                                jsonResponse += "Population: " + email + "\n\n";
                                jsonResponse += "Latitude: " + lat + "\n\n";
                                jsonResponse += "Longitude: " + lng + "\n\n\n";
                                jsonResponse += "Relation" + relation +"\n\n\n";

                                if(content.getRelation().equals("son"))
                                {
                                    googleMap.addMarker(new MarkerOptions()
                                            .position(lt)
                                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_son))
                                            .snippet(email)
                                            .title(content.getName())).showInfoWindow();

                                }
                                else
                                {
                                    googleMap.addMarker(new MarkerOptions()
                                            .position(lt)
                                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_daughter))

                                            .title(content.getName())).showInfoWindow();

                                }

                                CameraPosition cameraPosition = new CameraPosition.Builder().target(lt).zoom(15.0f).build();
                                CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
                                googleMap.moveCamera(cameraUpdate);



                            }



                            //txtResponse.setText(jsonResponse);

                        } catch (JSONException e) {
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }

                        //hidepDialog();


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                //hidepDialog();
            }
        });

        // Adding request to request queue
        //AppController.getInstance() == null;
        AppController.getInstance().addToRequestQueue(req);
    }

}
1
show us some more code. you usually don't have to reload the whole map. so I guess the problem is somewhere else - Martin Golpashin
@MartinGolpashin updated the question - AndroidProgrammer
does googleMap.addMarker get called? - Martin Golpashin
yes googleMap.addMarker is in this class - AndroidProgrammer
have you debugged your app to make sure that it gets called once you expect a new marker to get drawn? - Martin Golpashin

1 Answers

1
votes

Since googleMap.appMarker() seems not to get called, you propaply catch an Exception when calling content.getRelation().equals("son").