Android Guardar imágenes en una tarjeta de memoria o en una tarjeta SD
Tengo que buscar las imágenes y algunos otros datos del servidor y luego mostrarlo en la lista. Pero como el número de registros puede ser bastante grande, así que no estoy seguro si debo guardar imágenes en la base de datos SQLite o guardarlo en SDCard o guardarlos en la memoria.
Gracias, nil
- ¿Un cursor SQLite vacío devolverá true para isBeforeFirst, isAfterLast, ambos o ninguno?
- ¿Cómo obtener contactos en orden de sus próximos cumpleaños?
- Consulta SQLite en Android para contar filas
- ¿Cómo implementar deshacer un solo paso para los cambios en la base de datos SQLite?
- Acerca de la seguridad de Sqlite en android en caso de varios procesos
- Android SQLite - selecciónArgs que no sean cadenas
- Asegúrese de que SQLite en Android utiliza UTF-8 como un conjunto de caracteres
- Configuración de args de selecciones múltiples en la consulta de base de datos SQLite
- Creación de tablas en la base de datos sqlite en android
- Android SQLite ORDER BY no funciona
- Necesito el equivalente SQLite de MySQL para trabajar con unix timestamps
- SQLite de Android - Cursor y ContentValues
- Cómo eliminar la base de datos SQLite de Android mediante programación
Siempre hagas el hábito de guardar la ruta de las imágenes a la base de datos. Para ver una lista, asegúrese de usar la miniatura de la imagen. Esto le ayudará en la carga rápida de estas imágenes en la lista.
long selectedImageUri = ContentUris.parseId(Uri.parse(anniEntry.getUri())); Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail( mContext.getContentResolver(), selectedImageUri,MediaStore.Images.Thumbnails.MICRO_KIND, null );
Aquí anniEntry.getUri () es la imagen uri.Now, ponerlo en el segundo code.U puede obtener micro o mini miniatura de acuerdo a los requisitos
Generalmente se considera mala forma de guardar datos binarios como una imagen en una base de datos. En la mayoría de los casos, por algunas razones técnicas, en realidad terminará dañando el rendimiento de su base de datos. En su lugar, guarde las imágenes que desee almacenar en la memoria caché en la tarjeta SD y guarde el archivo de esas imágenes en la base de datos.
Si tiene que descargar imágenes y guardarlas en SDcard.Kindly siga el código abajo:
package com.tablet; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.net.UnknownHostException; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; /* * This class download & store the media in external storage * */ public class DownloadActivity extends Activity { private static String fileName = "android.jgp"; private Button btnDownload; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnDownload = (Button) findViewById(R.id.download); btnDownload.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { // TODO Auto-generated method stub download(); } }); private void download() { System.out.println("Inside Download"); try { // this is the file you want to download from the remote server String path = "http://code.google.com/android/goodies/wallpaper/android-wallpaper5_1024x768.jpg"; URL u = new URL(path); HttpURLConnection c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); String PATH = "/data/Kamal" //Environment.getExternalStorageDirectory() // + "/download/"; + "/"; Log.v("log_tag", "PATH: " + PATH); File file = new File(PATH); file.mkdirs(); File outputFile = new File(file, fileName); FileOutputStream f = new FileOutputStream(outputFile); InputStream in = c.getInputStream(); Log.v("log_tag"," InputStream consist of : "+in.read()); byte[] buffer = new byte[1024]; int len1 = 0; while ((len1 = in.read(buffer)) > 0) { //System.out.println("Reading byte : "+in.read(buffer)); f.write(buffer, 0, len1); } Toast.makeText(this, "Download Completed Successfully @ "+PATH, Toast.LENGTH_LONG).show(); f.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this, "MalformedURLException", Toast.LENGTH_LONG).show(); } catch (ProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this, "ProtocolException", Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this, "FileNotFoundException", Toast.LENGTH_LONG).show(); }catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this, "UnknownHostException", Toast.LENGTH_LONG).show(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this, "IOException", Toast.LENGTH_LONG).show(); } } }
Se trata de un requisito de aplicación y su aplicación. Yo sugeriría utilizar tarjeta interna o sd para almacenar las imágenes y guardar allí camino en db
Almacenar cualquier información pesada que no necesite el comportamiento de devolver sub-partes de los datos basados en la consulta aplicada (como imágenes, vídeos), no debe almacenarse en la base de datos, sino que sólo una referencia a que los datos deben ser almacenados.