Visualización de imágenes de la tarjeta sd en gridview android
Im Mostrar imágenes de una carpeta específica en la tarjeta sd en GridView hasta saber que todo funciona bien todas las imágenes se muestran en la vista de cuadrícula, pero cuando cambio la orientación de la pantalla se bloquea. A continuación está mi código y Crash Log:
import java.io.File; import android.content.Context; import android.net.Uri; import android.os.Environment; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context mContext; File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MYPICS" + File.separator); private File[] fileName = root.listFiles(); int count=fileName.length; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return fileName.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } // create a new ImageView for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { Uri uri = Uri.fromFile(fileName[position]); ImageView imageView; if (convertView == null) { // if it's not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageURI(uri); return imageView; } }
Estoy recibiendo la memoria de error, Abajo está mi Logcat:
- GetActivity () en el fragmento es nulo después del cambio de orientación
- ¿Cómo cambiar la orientación de la pantalla de GENYMOTION?
- Android SensorManager.java getOrientation y algoritmo getRotationMatrix
- GetRotationMatrix y tutorial de getOrientation
- QML Canvas en Android, problema de orientación
05-16 16:18:31.218: E/AndroidRuntime(26907): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:573) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:657) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.ImageView.resolveUri(ImageView.java:521) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.ImageView.setImageURI(ImageView.java:305) 05-16 16:18:31.218: E/AndroidRuntime(26907): at com.sachin.imagegrideview.ImageAdapter.getView(ImageAdapter.java:53) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.AbsListView.obtainView(AbsListView.java:1464) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.GridView.onMeasure(GridView.java:935) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewRoot.performTraversals(ViewRoot.java:845) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.os.Handler.dispatchMessage(Handler.java:99) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.os.Looper.loop(Looper.java:130) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.app.ActivityThread.main(ActivityThread.java:3687) 05-16 16:18:31.218: E/AndroidRuntime(26907): at java.lang.reflect.Method.invokeNative(Native Method) 05-16 16:18:31.218: E/AndroidRuntime(26907): at java.lang.reflect.Method.invoke(Method.java:507) 05-16 16:18:31.218: E/AndroidRuntime(26907): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 05-16 16:18:31.218: E/AndroidRuntime(26907): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 05-16 16:18:31.218: E/AndroidRuntime(26907): at dalvik.system.NativeStart.main(Native Method)
- Rotación de vista previa de la cámara Android
- ¿El error de AdView causó que todas las vistas de la Web dejen de cargarse cuando cambia la orientación y se están ejecutando múltiples subprocesos?
- Orientación de la pantalla de Android al sensor
- OnOrientationChanged () se llama cuando OrientationEventListener está deshabilitado
- Problema de Viewport en orientación normal móvil
- Android - desactivar el modo de paisaje?
- ¿Qué significa este Android Lint: "Orientación errónea?"
- Servicio de Android> Actividad> Fragmento con ViewPager
Agregue esto a su manifiesto para la actividad listview
android:configChanges="orientation|keyboardHidden"
Si esto no ayuda a continuación, agregar este pedazo de código para su archivo de imagen para muestrear el mapa de bits
private Bitmap decodeFile(File f){ FileOutputStream os = null; try { //Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; FileInputStream fis = new FileInputStream(f); BitmapFactory.decodeStream(fis, null, o); fis.close(); int scale = 1; if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) { scale = (int)Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5))); } //Decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; fis = new FileInputStream(f); try { b = BitmapFactory.decodeStream(fis, null, o2); } catch (OutOfMemoryError e) { Log.d("hai","filename"+f); System.gc(); } fis.close(); } catch (IOException e) { } return b; }
Cargar muchas imágenes hace que la aplicación se quede sin memoria y la fuerza se cierra. Creo que esto es lo que sucede a su problema de memoria application.the es un problema complejo de Android mientras se desarrolla un application.this se puede resolver mediante la limpieza manual de los mapas de bits no utilizados y Utilizando el recolector de basura.
Intente usar System.gc ();
Intente reciclar el mapa de bits utilizando
Bitmap.recycle ();
Hacer todo el mapa de bits sin usar nulo.
Desasignar toda la memoria no utilizada.
Todo esto te ayudará mucho y también pasará por este enlace. Utiliza un analizador de memoria que te ayudará a detectar la memoria Desactivada> prueba este enlace
<activity android:configChanges="keyboardHidden|orientation"></activity>
En su manifest.xml edite su etiqueta de actividad y pruebe
- Android cómo hacer intrincados fondos y fronteras
- Obtener la posición de fila de listview en el golpe