2012-02-14 94 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(); 
     } 
    } 



}