2012-02-14 6 views
15

Necesito buscar imágenes y otros datos del servidor y luego mostrarlos en la lista. Pero como el número de registros puede ser bastante grande, no estoy seguro de si debo guardar imágenes en la base de datos SQLite o guardarlas en la tarjeta SD o guardarlas en la memoria.Android Guarde las imágenes en SQLite o SDCard o en la memoria

Gracias, nula

+2

puede guardar ruta de las imágenes en la base de datos SQLite y se puede recuperar fácilmente. pero si desafortunadamente borras la imagen que almacenaste ya entonces necesitas capturar esto. avíseme si está interesado en darle un código de muestra. – OnkarDhane

+0

@nilMoBile debe verificar mi [respuesta] (http://stackoverflow.com/a/9141116/996493) puede ayudar :) – Lucifer

+0

Llegué a este problema y solía guardar la ruta de la imagen a la base de datos para la flexibilidad y para De trabajo rápido, recomendé no guardar valores binarios en la base de datos como imágenes, usar la memoria interna para guardar imágenes y usar la base de datos para guardar la ruta de las imágenes. La respuesta dada por Kurtis Nusbaum está bien explicada. – RobinHood

Respuesta

18

Siempre haga un hábito de guardar la ruta de las imágenes a la base de datos. Para una vista de lista, asegúrese de usar solo la imagen de esa imagen. Esto te ayudará a cargar rápidamente 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, lo puso en segundo code.U puede obtener miniatura micro o mini según el requisito

+0

que parece una excelente manera de hacerlo, ¿tiene alguna muestra para usar? las miniaturas que has mencionado. – nilMoBile

+0

Tienes que usar el uri para obtener una miniatura de mapa de bits. Estoy publicando el código en edición. Estoy satisfecho con la respuesta y luego la acepto. –

+1

Creo que este es otro problema, por lo que es mejor buscar primero y si no lo haces obtener alguna solución, entonces, de nuevo plantear pregunta en SO. @ nilMoBile – RobinHood

12

Es generalmente considerado de mala forma a guardar los 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 desea almacenar en la memoria caché de la tarjeta SD y simplemente almacene la ruta del archivo de esas imágenes en la base de datos.

+1

¿Qué sucede si el usuario elimina las imágenes de mi aplicación? –

+2

Si las imágenes están en almacenamiento interno, solo puede acceder a ellas desde su aplicación (lo que significa que el usuario no puede eliminarlas). Si los almacena en la tarjeta SD, entonces necesita escribir su código de manera que maneje el caso donde el usuario borre su imagen. Consulte esto para saber cómo usar el almacenamiento interno: http://developer.android.com/training/basics/data-storage/files.html –

1

Es una cuestión de requisitos de la aplicación y su aplicación. Sugeriría utilizar tarjeta interna o sd para almacenar las imágenes y guardar su ruta en db

+0

¿Qué sucede si el usuario externamente va a la tarjeta SD y elimina las imágenes de mi aplicación? –

+1

Sí El almacenamiento de la tarjeta SD se comparte entre las aplicaciones, por lo que podría ser el caso de que pueda eliminar las imágenes de la aplicación, de modo que siempre pueda guardar las imágenes en la memoria privada para su aplicación.Según la pregunta original, la memoria caché de mapa de bits también se puede utilizar como complemento para mejorar la experiencia del usuario. – Relsell

1

Almacenar datos pesados ​​que no necesitan el comportamiento de devolver subpartes de esos datos en función de la consulta aplicada (como imágenes, videos), no se debe almacenar en la base de datos, sino que solo se debe almacenar una referencia a esos datos.

+0

¿Qué sucede cuando el usuario móvil borra las imágenes de mi aplicación? –

3

Si usted tiene que descargar imágenes & salvamento en SDcard.Kindly sigue a continuación código:

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(); 
     } 
    } 



} 
Cuestiones relacionadas