Я пытаюсь реализовать простое приложение и использовать фрагменты, которые я пытаюсь отметить пятнами на карте.маркеры карты Android не отображаются
Мой фрагмент имеет следующий код:
package pt.com.hugo_dias.hstapplication.customer.fragments;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
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.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import java.util.List;
import pt.com.hugo_dias.HSTApplication;
import pt.com.hugo_dias.hstapplication.R;
import pt.com.hugo_dias.hstapplication.customer.database.Customer;
import pt.com.hugo_dias.hstapplication.customer.database.CustomerDatabaseHelper;
import pt.com.hugo_dias.hstapplication.customer.exceptions.CustomerException;
public class GoogleMapFragment extends SupportMapFragment implements OnMapReadyCallback{
/**
* The fragment argument representing the item ID that this fragment
* represents.
*/
private CustomerDatabaseHelper customerHelper;
private GoogleMap mMap;
public GoogleMapFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
getActivity().invalidateOptionsMenu();
View rootView = null;
long id = getActivity().getIntent().getLongExtra("ID", 0);
rootView = inflater.inflate(R.layout.fragment_map, container, false);
getMapAsync(this);
return rootView;
}
public CustomerDatabaseHelper getCustomerHelper() {
if (customerHelper == null) {
customerHelper = new CustomerDatabaseHelper(getActivity());
}
return customerHelper;
}
public void setCustomerHelper(CustomerDatabaseHelper customerHelper) {
this.customerHelper = customerHelper;
}
@Override
public void onDestroyView() {
super.onDestroyView();
mMap = null;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
long id = getActivity().getIntent().getLongExtra("ID", 0);
if (id == 0) {
Log.i(HSTApplication.TAG, "Customer id cannot be 0 ");
Toast.makeText(getActivity(), R.string.customerdoesntexists,
Toast.LENGTH_LONG).show();
return;
}
Customer customer;
try {
customer = getCustomerHelper().getCustomer(id);
} catch (CustomerException e) {
Log.i(HSTApplication.TAG, "Customer does not exists - " + id);
Toast.makeText(getActivity(), R.string.customerdoesntexists,
Toast.LENGTH_LONG).show();
return;
}
double latitude = customer.getLatitude();
double longitude = customer.getLongitude();
LatLng position = new LatLng(latitude, longitude);
googleMap.setMyLocationEnabled(true);
googleMap.addMarker(new MarkerOptions().position(
position).title(customer.getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 10));
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
try {
List<Customer> dependencies = getCustomerHelper().getDependencies(id);
for(Customer dependency : dependencies){
position = new LatLng(dependency.getLatitude(), dependency.getLongitude());
googleMap.addMarker(new MarkerOptions().position(
position).title(dependency.getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
}
} catch (CustomerException e) {
e.printStackTrace();
}
}
}
Я не понимаю, почему маркеры не показаны, но я вижу, что метод будет называться во время отладки.
Сначала убедитесь, что вызывается код «addMarker». Кроме того, убедитесь, что у вас есть правильные длинные и лат значения – Snake
Они правильные, как видно в отладке. –
Итак, вы добавили lat/lng в google map (в браузере) и убедились, что можете их увидеть, правильно? Потому что однажды я думал, что использую правильные ценности, и они были вне моего региона. Другое предложение - переместить код с помощью «addMarker» после «setMapType» – Snake