vendredi 29 août 2014

Out of Memory Error - When Creating Map Marker into Bitmap


Vote count:

0




This error doesn't happen when the map loads but after moving the map position to other locations and new markers appear...


Here is Stacktrace:



08-29 14:31:22.174: E/AndroidRuntime(27964): FATAL EXCEPTION: AsyncTask #1
08-29 14:31:22.174: E/AndroidRuntime(27964): java.lang.RuntimeException: An error occured while executing doInBackground()
08-29 14:31:22.174: E/AndroidRuntime(27964): at android.os.AsyncTask$3.done(AsyncTask.java:299)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
08-29 14:31:22.174: E/AndroidRuntime(27964): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.lang.Thread.run(Thread.java:856)
08-29 14:31:22.174: E/AndroidRuntime(27964): Caused by: java.lang.OutOfMemoryError
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.lang.StringBuilder.append(StringBuilder.java:271)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.io.BufferedReader.readLine(BufferedReader.java:417)
08-29 14:31:22.174: E/AndroidRuntime(27964): at com.---.---.MapLocationsFragment$NearLocationsTask.doInBackground(MapLocationsFragment.java:288)
08-29 14:31:22.174: E/AndroidRuntime(27964): at com.---.---.MapLocationsFragment$NearLocationsTask.doInBackground(MapLocationsFragment.java:208)
08-29 14:31:22.174: E/AndroidRuntime(27964): at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-29 14:31:22.174: E/AndroidRuntime(27964): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
08-29 14:31:22.174: E/AndroidRuntime(27964): ... 4 more


Here is how I create the Bitmap:



public Bitmap loadBitmapFromView(View v) {

try {
if (v.getMeasuredHeight() <= 0) {
v.measure(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.draw(c);
return b;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}


It is called in my doInBackground in my AsyncTask, like:


MarkerOptions marker = new MarkerOptions() .position(LOC) .snippet(user) .title(name) .icon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(v1)));


In onPostExecute, I add new markers that the database find that are not already showing.


Here is how I set up my map:


Other tidbits:



googleMap.setClustering(new ClusteringSettings().enabled(false)
.addMarkersDynamically(true));

googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cp) {

LOC = cp.target;
MainActivity.mLongitude = LOC.longitude;
MainActivity.mLatitude = LOC.latitude;

if (!running) {
new NearLocationsTask().execute();
}
}
});


And I am using android-map-extensions



asked 1 min ago







Out of Memory Error - When Creating Map Marker into Bitmap

Aucun commentaire:

Enregistrer un commentaire