2012-02-14 16 views
15

サーバから画像やその他のデータを取得して、リストに表示する必要があります。しかし、レコード数がかなり多いので、イメージをSQLiteデータベースに保存するかSDCardに保存するか、メモリに保存するかどうかはわかりません。AndroidイメージをSQLiteまたはSDCardまたはメモリに保存する

おかげで、 ゼロ

+2

。残念ながらあなたがすでに保存している画像を削除する場合は、これをキャッチする必要があります。興味があればサンプルコードを提供するかどうかお知らせください。 – OnkarDhane

+0

@ nilMoBileあなたは私の[回答](http://stackoverflow.com/a/9141116/996493)をチェックしてください:) – Lucifer

+0

私はこの問題に遭遇しました。高速な作業、私は画像などのデータベースにバイナリ値を保存しないでください、画像を保存するために内部メモリを使用し、画像のパスを保存するためにデータベースを使用してください。 Kurtis Nusbaumの答えがよく説明されています。 – RobinHood

答えて

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は()の要件

+0

これは素晴らしい方法ですが、使用するサンプルがありますかあなたが言及したサムネイルの方法。 – nilMoBile

+0

あなたはビットマップのサムネイルを取得するためにURIを使用する必要があります。私はedit.Iでコードを投稿しています。答えに満足しています。それを受け入れます。 –

+1

これはあなたの別の問題だと思います。 @ nilMoBile – RobinHood

12

一般的には、データベース内の画像のようなバイナリデータを保存するために、悪いフォームと考えられています。ほとんどの場合、技術的な理由により、実際にはデータベースのパフォーマンスが損なわれます。代わりに、キャッシュするイメージをSDカードに保存し、それらのイメージのファイルパスをデータベースに保存するだけです。

+1

ユーザーが自分のアプリケーションの画像を削除するとどうなりますか? –

+2

画像が内部ストレージに保存されている場合は、アプリでのみアクセスできます(つまり、画像は削除できません)。それらをSDカードに保存する場合は、ユーザーが画像を削除するケースを処理するようにコードを記述する必要があります。 内部ストレージの使用方法はこちらをご覧ください:http://developer.android.com/training/basics/data-storage/files.html –

1

このアプリケーション要件とその実装の問題によるマイクロまたはミニサムネイルを取得することができます第二code.Uに入れて、画像uri.Nowです。私は内部またはSDカードを使用して画像を保存し、そこにパスを保存することをお勧めします

+0

外部からSDカードに行ってアプリケーションイメージを削除するとどうなるでしょうか? –

+1

はいSDカードストレージはアプリケーション間で共有されているため、アプリケーションイメージを削除することができます。そのため、アプリケーションをいつでも専用メモリに保存できます。オリジナルの質問によると、ビットマップキャッシュをアドオンとして使用してユーザーエクスペリエンスを向上させることもできます。 – Relsell

1

適用されたクエリに基づいてそのデータのサブ部分を返す動作を必要としない、ビデオ)は、データベースに格納すべきではなく、そのデータへの参照のみを格納する必要があります。

+0

モバイルユーザーが自分のアプリケーションイメージを削除するとどうなりますか? –

3

あなたは、コードの下に続くSDcard.Kindlyに保存&イメージをダウンロードする必要がある場合:あなたはSQLiteのデータベース内の画像のパスを保存することができますし、それを簡単に取得することができます

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



} 
関連する問題