In one of my activity I am showing google map in fragment. It's working fine with 3g or high speed internet connection. But in 2g or very slow internet connection it's hang my mobile, And after some time I get 'not responding' message. Is there any way by which i can handle this situation?
Here is my working code:-
public class MapLoader extends FragmentActivity implements View.OnClickListener {
// GUI Widget
TextView lblNumber;
Button btnCall;
String number;
GoogleMap googleMap;
Bitmap myBitmap;
private String filePath;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapload);
// Getting reference to the SupportMapFragment of activity_main.xml
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
// Getting GoogleMap object from the fragment
googleMap = mapFragment.getMap();
googleMap.clear();
String filterAddress = "";
double lat=0;
double lng=0;
String ontime="";
try {
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.getUserData(number);
if(json.has("user")) {
JSONArray android_version_array = json.getJSONArray("user");
//getting android version
for (int i = 0; i < android_version_array.length(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
JSONObject myObj = android_version_array.getJSONObject(i);
String lattiude = myObj.getString("latitude");
String logitude = myObj.getString("longitude");
ontime=myObj.getString("gpsTime");
lat = Double.parseDouble(lattiude);
lng = Double.parseDouble(logitude);
// adding each child node to HashMap key => value
}
Geocoder geoCoder = new Geocoder(
getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(
lat,
lng, 1);
if (addresses.size() > 0) {
for (int index = 0;
index < addresses.get(0).getMaxAddressLineIndex(); index++)
filterAddress += addresses.get(0).getAddressLine(index) + " ";
}
// SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
// mapFragment.getView().findViewById()
TextView a = (TextView) findViewById(R.id.test);
a.setText(filterAddress);
} catch (IOException ex) {
ex.printStackTrace();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
// Creating an instance of MarkerOptions to set position
MarkerOptions markerOptions = new MarkerOptions();
LatLng LOCATION = new LatLng(lat, lng);
// Setting position on the MarkerOptions
markerOptions.position(LOCATION);
// Animating to the currently touched position
// googleMap.animateCamera(CameraUpdateFactory.newLatLng(LOCATION),17.0f);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 17.0f));
// Adding marker on the GoogleMap
Marker marker = googleMap.addMarker(markerOptions);
// Showing InfoWindow on the GoogleMap
marker.showInfoWindow();
}catch (Exception e){
e.printStackTrace();
}
}
}
NOTE:- It's not a full code. I removed some of code for security reason.
getMap()
is deprecated. You should usegetMapAsync()
and avoid to wait on the UI thread.