2012-02-14 99 views
15

我需要获取的图像和来自服务器的其他一些数据,然后在列表中显示。但是由于记录数量可能非常大,所以我不确定是否应该将图像保存到SQLite数据库或将其保存到SDCard或将其保存到内存中。Android的影像保存到SQLite的或SD卡或内存

感谢, 零

+2

可以保存在SQLite数据库图像的路径,并可以很容易地检索。但如果不幸的是你删除你已经存储的图像,那么你需要抓住这个。让我知道如果感兴趣会给你示例代码。 – OnkarDhane 2012-02-14 07:14:53

+0

@nilMoBile你应该检查我的【答案】(http://stackoverflow.com/a/9141116/996493),它可以帮助你:) – Lucifer 2012-06-01 04:43:07

+0

我来到这个问题,我用来保存图像数据库路径的灵活性和快速工作,我建议不要将二进制值保存到数据库像图像,使用内部存储器保存图像和使用数据库来保存图像路径。 Kurtis Nusbaum给出的答案很好解释。 – RobinHood 2012-02-14 07:27:36

回答

18

总是要保存图像数据库路径的习惯。对于列表视图,请确保只使用这些图像的缩略图。这将帮助您快速加载列表中的这些图像。

long selectedImageUri = ContentUris.parseId(Uri.parse(anniEntry.getUri())); 
Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(
        mContext.getContentResolver(), selectedImageUri,MediaStore.Images.Thumbnails.MICRO_KIND, 
        null); 

这里anniEntry.getUri()是图像uri.Now,把它放在第二code.U可根据需要

+0

似乎一个很好的路要走,你有什么样使用您提到的缩略图方式。 – nilMoBile 2012-02-14 07:20:06

+0

你必须使用uri来获取位图缩略图。我在edit.I中发布代码,你满意答案然后接受它 – 2012-02-14 07:24:57

+1

我认为这是你的另一个问题,所以它最好先搜索,如果你不得到任何解决方案,然后再次提出问题在SO。@ nilMoBile – RobinHood 2012-02-14 07:29:55

12

它通常被认为是不好的形式保存二进制数据就像在一个数据库中的图像。在大多数情况下,出于某些技术原因,它实际上最终会损坏数据库的性能。相反,将要缓存的图像保存到SD卡,并将这些图像的文件路径存储在数据库中。

+1

如果用户删除我的应用程序的图像,该怎么办? – 2015-12-23 08:46:40

+2

如果图像在内部存储器中,则只能由您的应用访问(这意味着用户无法删除它们)。如果将它们存储在SD卡上,则需要编写代码,以便处理用户删除图像的情况。 看看这个如何使用内部存储:http://developer.android.com/training/basics/data-storage/files.html – 2015-12-26 00:47:14

1

它的应用需求及其实现的问题得到微型或小型缩略图。我会建议使用内部或SD卡存储图像,并保存在数据库

+0

如果用户外部去SD卡和删除我的应用程序图像? – 2015-12-23 08:45:03

+1

是SD卡存储的应用程序之间共享所以它可能是你能删除你的应用程序图像的情况下,让您可以随时保存图像专用内存的应用..按照原来的问题来讲,位图缓存也可以作为附加使用来增强用户体验。 – Relsell 2015-12-24 17:27:57

1

存储不需要返回基于应用的查询数据的子部分的行为(如图像的任何繁重的数据有路径,视频)不应该存储在数据库中,而只应该存储对该数据的引用。

+0

什么时候移动用户删除我的应用程序图像? – 2015-12-23 08:46:00

3

如果你要下载图片&保存在SDcard.Kindly遵循下面的代码:

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



}