I am new to android and sometimes I have this issue (i do not why), and sometimes the app works. It like if I clean the project and rebuild everything, and then restart android studio sometimes it works without any issue, and sometimes it does not work at all because of this error... Can somebody tell me what is going on? Thanks
package com.app.maps1.fragments;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.app.maps1.R;
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.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
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 java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
/**
* A simple {@link Fragment} subclass.
* Use the {@link MapFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnMarkerDragListener {
private View rootView;
private MapView mapView;
private GoogleMap gMap;
private Geocoder geocoder; //para obtener localizacion
private List<Address> addresses;
private MarkerOptions marker; //para customizar marcador
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public MapFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment MapFragment.
*/
// TODO: Rename and change types and number of parameters
public static MapFragment newInstance(String param1, String param2) {
MapFragment fragment = new MapFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
rootView = inflater.inflate(R.layout.fragment_map, container, false);
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mapView = (MapView) rootView.findViewById(R.id.map);
if (mapView != null){
mapView.onCreate(null);
mapView.onResume();
mapView.getMapAsync(this);
}
// this.checkIfGPSIsEnabled();
}
/*@Override
public void onResume() {
super.onResume();
this.checkIfGPSIsEnabled();
}*/
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
gMap = googleMap;
LatLng torreon = new LatLng(25.53986916895781, -103.40568068906825);
// solo para zoom
CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
//para customizar marcador
marker = new MarkerOptions();
marker.position(torreon);
marker.title("Mi marcador");
marker.draggable(true);
marker.snippet("Esto es una caja de texto donde se modifican los datos");
marker.icon(BitmapDescriptorFactory.fromResource(android.R.drawable.star_on));
gMap.addMarker(marker);
//gMap.addMarker(new MarkerOptions().position(torreon).title("Estas en Torres").draggable(true));
gMap.moveCamera(CameraUpdateFactory.newLatLng(torreon));
gMap.animateCamera(zoom);
gMap.setOnMarkerDragListener(this);
geocoder = new Geocoder(getContext(), Locale.getDefault());
//CameraPosition camera = new CameraPosition.Builder()
//.target(torreon)
//.zoom(13) // limite 21
//.bearing(0) //rotacion de camara al este 365º
//.tilt(0) // vista 3D limite 90
//.build();
//gMap.animateCamera(CameraUpdateFactory.newCameraPosition(camera));
}
/* private void checkIfGPSIsEnabled(){
try {
int gpsSignal = Settings.Secure.getInt(getActivity().getContentResolver(), Settings.Secure.LOCATION_MODE);
if (gpsSignal == 0){
//gps no activado
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
}*/
@Override
public void onMarkerDragStart(@NonNull Marker marker) {
marker.hideInfoWindow();
}
@Override
public void onMarkerDrag(@NonNull Marker marker) {
}
@Override
public void onMarkerDragEnd(@NonNull Marker marker) {
double latitude = marker.getPosition().latitude;
double longitude = marker.getPosition().longitude;
try {
addresses = geocoder.getFromLocation(latitude, longitude, 1);
} catch (IOException e) {
e.printStackTrace();
}
String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getLocality(); //ciudad
String state = addresses.get(0).getAdminArea(); //estado
String country = addresses.get(0).getCountryName(); //pais
String postalCode = addresses.get(0).getPostalCode();//codigo postal
//informacion en caja de marcador
//marker.setSnippet( city + ", " + country + " ( " + postalCode + " )");
//para mostrar info de snippet al soltar marcador
marker.showInfoWindow();
Toast.makeText(getContext(), "address: " + address + "\n" +
"city: " + city + "\n" +
"state: " + state + "\n" +
"country: " + country + "\n" +
"postal code: " + postalCode + "\n"
, Toast.LENGTH_LONG).show();
}
}
}
´´´´