В одном из моих действий я показываю google-карту в фрагменте. Он отлично работает с 3-х или высокоскоростным подключением к Интернету. Но в 2g или очень медленном подключении к Интернету это повесит мой мобильный телефон, и через некоторое время я получаю сообщение «не отвечаю». Есть ли способ, которым я могу справиться с этой ситуацией?Google map висит в медленном интернет-соединении, Android
Вот мой рабочий код: -
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();
}
}
}
Примечание: - Это не полный код. Я удалил код из соображений безопасности.
Спасибо, но когда я использую getMapAsync, его показ не может решить метод getMapAsync. – neooo
Возможно, вы используете очень старую версию библиотеки, вам нужно обновить ее до последней версии. – greywolf82
Я использую эту компиляцию 'com.google.android.gms: play-services: 4.3.23' – neooo