显示googlemap中arrayList <string>的所有点

时间:2016-01-06 12:12:42

标签: android google-maps

我试图从arraylist获取所有点并在地图上显示它们中的每一个。我似乎无法弄清楚它是如何完成的。这些点应该在点击按钮时显示。

public class TrackUserGps extends AppCompatActivity implements OnMapReadyCallback {

    Button btnSearch;
    String strJrEmpID, strJrEmpName, strGetData;
    ClsWebConnection oClsWeb = new ClsWebConnection();
    ArrayList<String> arrPosition1 = new ArrayList<>();
    ArrayList<String> arrPosition2 = new ArrayList<>();
    Location location;
    double latitude, longitude;
    Polyline line;
    LatLng latLng;
    String strLat, strLng;
    List<Marker> markers = new ArrayList<Marker>();
    private EditText dateSet, timeset;
    private Calendar cal;
    private int day;
    private int month;
    private int year;
    private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
            dateSet.setText(selectedDay + " / " + (selectedMonth + 1) + " / " + selectedYear);
        }
    };

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

        Toolbar JrEmpNameToolbar = (Toolbar) findViewById(R.id.JrEmpNameToolbar);
        setSupportActionBar(JrEmpNameToolbar);

        strJrEmpID = getIntent().getStringExtra("JRempID");
        strJrEmpName = getIntent().getStringExtra("JRempName");

        TextView JrEmpNameText = (TextView) findViewById(R.id.JrEmpNameText);
        JrEmpNameText.setText(strJrEmpName);

        dateSet = (EditText) findViewById(R.id.dateSet);
        timeset = (EditText) findViewById(R.id.timeset);
        btnSearch = (Button) findViewById(R.id.btnSearch);

        cal = Calendar.getInstance();
        day = cal.get(Calendar.DAY_OF_MONTH);
        month = cal.get(Calendar.MONTH);
        year = cal.get(Calendar.YEAR);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy");
        dateSet.setText(newDateFormat.format(cal.getTime()));

        Calendar c = Calendar.getInstance();
        int mHour = c.get(Calendar.HOUR_OF_DAY);
        int mMinute = c.get(Calendar.MINUTE);

        timeset.setText(mHour + ":" + mMinute);

        dateSet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog(0);
            }
        });

        final GoogleMap gmap = null;

        timeset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Calendar mcurrentTime = Calendar.getInstance();
                int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                int minute = mcurrentTime.get(Calendar.MINUTE);
                int second = mcurrentTime.get(Calendar.SECOND);
                TimePickerDialog mTimePicker;
                mTimePicker = new TimePickerDialog(TrackUserGps.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        timeset.setText(selectedHour + ":" + selectedMinute);
                    }
                }, hour, minute, true);//Yes 24 hour time
                mTimePicker.setTitle("Select Time");
                mTimePicker.show();
            }
        });

        btnSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (ClsWebConnection.FunIsNetAvailable()) {
                    strGetData = oClsWeb.FunGetUserListPosition(strJrEmpID, dateSet.getText().toString(), timeset.getText().toString());
                    Log.d("strGetDataGoogle", strGetData);
                    if (!strGetData.equalsIgnoreCase("NA")) {
                        if (strGetData.contains("#")) {
                            String[] strHash = strGetData.split("#");
                            for (String aStrHash : strHash) {
                                String[] strComma = aStrHash.split(",");
                                arrPosition1.add(strComma[0]);
                                arrPosition2.add(strComma[1]);
                            }
                        } else {
                            String[] strComma = strGetData.split(",");
                            arrPosition1.add(strComma[0]);
                            arrPosition2.add(strComma[1]);
                        }
                        onMapReady(gmap);
                    } else {
                        Toast.makeText(getApplicationContext(), "No data available", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(getApplicationContext(), "No Internet available", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    @Override
    @Deprecated
    protected Dialog onCreateDialog(int id) {
        return new DatePickerDialog(this, datePickerListener, year, month, day);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        GoogleMap mMap = googleMap;

        for (int iCnt = 0; iCnt < arrPosition1.size(); iCnt++) {

            Double latitude = Double.valueOf(arrPosition1.get(iCnt));
            Double longitude = Double.valueOf(arrPosition2.get(iCnt));

            Log.d("latitudeC", String.valueOf(latitude));
            Log.d("longitudeC", String.valueOf(longitude));

            LatLng leadLatLng = new LatLng(latitude, longitude);
            mMap.addMarker(new MarkerOptions().position(leadLatLng));
            Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(strLat), Double.parseDouble(strLng))).title("Position"));
            markers.add(marker);
        }
        markers.size();
    }
}

希望我能让这个工作......点击按钮

下面的LOGCAT
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.Syncnetic.OnSight, PID: 29563
    java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker
    com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference
    at com.Syncnetic.OnSight.TrackUserGps.onMapReady(TrackUserGps.java:185)
    at com.Syncnetic.OnSight.TrackUserGps$3.onClick(TrackUserGps.java:137)
    at android.view.View.performClick(View.java:4780)
    at android.view.View$PerformClick.run(View.java:19866)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

1 个答案:

答案 0 :(得分:0)

你的gmap是null 首先要改变

 GoogleMap mMap = googleMap;

 gmap = googleMap;

第二

  onMapReady(gmap);

永远不要将此直接更改为

if(gmap!=null)
//call the loop for displaying marker
else
//show a toast to wait till map is ready

也可以在地图准备好的

中从内部删除循环