2014-02-21 3 views
0

URL에서 이미지를 검색했습니다. 이 이미지를 SQLite 데이터베이스에 삽입하고 싶습니다. 인코딩 후에 삽입하려고 시도했지만 스팅 값이 저장되고 있습니다. 누구든지 SQLite 데이터베이스에 그림을 삽입하는 방법을 제안 할 수 있습니까? 여기 내 코드는 다음과 같습니다 데이터베이스에 이미지를 넣기안드로이드에 sqlite 데이터베이스에 이미지를 삽입하는 방법?

Login.java

final String t1=user.getId(); 
final String t2=user.getName(); 
AsyncTask<Void, Void, Bitmap> t = new AsyncTask<Void, Void, Bitmap>(){ 

@Override 
    protected Bitmap doInBackground(Void... arg0) { 
     // TODO Auto-generated method stub 
      Bitmap bm = null; 
        try { 
        URL aURL = new URL("http://graph.facebook.com/"+t1+"/picture?type=small"); 
        URLConnection conn = aURL.openConnection(); 
        conn.setUseCaches(true); 
        conn.connect(); 
        InputStream is = conn.getInputStream(); 
        BufferedInputStream bis = new BufferedInputStream(is); 
        bm = BitmapFactory.decodeStream(bis); 

        bis.close(); 
        is.close(); 
         } 
           catch (IOException e) { 
          e.printStackTrace(); 
         } 
         return bm; 
        } 
        protected void onPostExecute(Bitmap bm){ 
         //Drawable drawable = new BitmapDrawable(getResources(), bm); 
         Bitmap b1=bm; 
         ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
         b1.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
         byte[] b = baos.toByteArray(); 
         // Log.w("bit",""+drawable); 
         String encodedImage = Base64.encodeToString(b,Base64.DEFAULT); 
         fbdetails.put("fbname",t2); 
         fbdetails.put("fbuserid",t1); 
         fbdetails.put("fbpic",encodedImage); 
         db.insertme(fbdetails); 
        } 
       }; 
       t.execute(); 
      } 
     }); 

Databasehandler.java

public void insertme(HashMap<String, String> queryValues) { 
    SQLiteDatabase database = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put("fbname", queryValues.get("fbname")); 
    values.put("fbuserid", queryValues.get("fbuserid")); 
    values.put("fbpic", queryValues.get("fbpic")); 

    database.insert("me", null, values); 
    database.close(); 
} 
+0

확인이 링크, 진드기 도움이 될위한 U http://stackoverflow.com/questions/17448405/save-image-in-sqlite- 데이터베이스에서 서버-URL http://stackoverflow.com/questions/18798189/adding-image-to-android-sqlite-database http://stackoverflow.com/questions/17482575/ save-image-from-url-to- sqlite-database –

답변

1

됩니다 things-을 수행하는 나쁜 방법 데이터베이스 b를 늘려 데이터를 가져와 올바른 형식으로 변환해야합니다. 대신, 디스크 * (SDCARD) *에 저장하고 파일 이름을 DB에 저장하십시오. 그런 다음 SDCARD에서로드하십시오.

+0

congratz..keep going – user3256145

+0

친절하게 대답을 수락하십시오. –

+0

Richard Hipp에 따르면 SQLite 아키텍트와 주요 개발자는 이미지를 데이터베이스에 저장하는 것이 일을하는 * 좋은 방법이라고 설명합니다 http://sqlite.1065341.n5.nabble.com/store-image-file-as-blob -tp71972p71994.html –

1

BLOB 유형 정보를 찾아야합니다. 데이터베이스에 이미지를 저장하는 유일한 방법입니다. 그러나 먼저 비트 맵을 변환해야합니다.

0

가 코딩해야 base64로 문자열 VIST [http://developer.android.com/reference/android/util/Base64.html]

0

에만 데이터베이스에서 이미지의 경로를 삽입해야합니다.

String path = Images.Media.insertImage(context.getContentResolver(), bm, "YourTitle", null); 

그리고 문자열로 경로를 삽입

...

0
public class ImageManipulation { 

public static String encodeImage(byte[] imageByteArray) { 
return Base64.encodeToString(imageByteArray, 0); 
} 

public static byte[] decodeImage(String imageDataString) { 
return Base64.decode(imageDataString, 0); 
} 

public static Drawable getDrawableFromString(String imageString) { 
byte[] imageBytes = decodeImage(imageString); 
Drawable image = null; 
image = new BitmapDrawable(BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length)); 

return image; 

} 

}

당신은 폴더의 유틸리티 클래스 위에 사용할 수 있습니다.

0
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 

public class MyDataBase extends SQLiteOpenHelper{ 

    public MyDataBase(Context context, String dbname, CursorFactory factory, int dbversion) { 
     super(context, dbname, factory, dbversion); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table tableimage(image blob);"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

} 


======================================== 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener{ 

    private ImageView imageview=null; 
    private Button btninsert=null; 
    private Button btnretrive=null; 
    private MyDataBase mdb=null; 
    private SQLiteDatabase db=null; 
    private Cursor c=null; 
    private byte[] img=null; 
    private static final String DATABASE_NAME = "ImageDb.db"; 
    public static final int DATABASE_VERSION = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btninsert=(Button)findViewById(R.id.button_insert); 
     btnretrive= (Button)findViewById(R.id.button_retrieve); 
     imageview= (ImageView)findViewById(R.id.imageView_image); 
     imageview.setImageResource(0); 
     btninsert.setOnClickListener(this); 
     btnretrive.setOnClickListener(this); 
     mdb=new MyDataBase(getApplicationContext(), DATABASE_NAME,null, DATABASE_VERSION); 


     Bitmap b=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
     b.compress(Bitmap.CompressFormat.PNG, 100, bos); 
     img=bos.toByteArray(); 
     db=mdb.getWritableDatabase(); 
    } 
    @Override 
    public void onClick(View arg0) { 

     if(btninsert==arg0) 
     { 
      ContentValues cv=new ContentValues(); 
      cv.put("image", img); 
      db.insert("tableimage", null, cv); 
      Toast.makeText(this, "inserted successfully", Toast.LENGTH_SHORT).show(); 
     } 
     else if(btnretrive==arg0) 
     { 
       String[] col={"image"}; 
       c=db.query("tableimage", col, null, null, null, null, null); 

       if(c!=null){ 
        c.moveToFirst(); 
        do{ 
         img=c.getBlob(c.getColumnIndex("image")); 
         }while(c.moveToNext()); 
       } 
       Bitmap b1=BitmapFactory.decodeByteArray(img, 0, img.length); 

       imageview.setImageBitmap(b1); 
       Toast.makeText(this, "Retrive successfully", Toast.LENGTH_SHORT).show(); 
      } 
     } 

} 
당신은 위의 코드를 사용할 수 있습니다

..

관련 문제