我试图从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();
}
}
希望我能让这个工作......点击按钮
下面的LOGCATE/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)
答案 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
也可以在地图准备好的
中从内部删除循环