2011-09-22 3 views
2

나는 글로벌 DBAdapter와 각 테이블에 대해 하나씩 가지고있다. 내 전역 DB 어댑터에서 "BLOB"유형을 열에 추가했습니다. 하지만 내가 DBAdapter 특정 테이블에 대한 변경해야 얻을지 않습니다. BLOB 유형에서도 작동하도록 변경해야합니다.DBAdapter에 BLOB 타입의 컬럼을 가진 테이블을 생성하는 방법

그래서 여기 당신은 간다 :

글로벌 DBAdapter : 나는 일을 가지고 내 SmileyDBAdapter에서 변경할 필요가 무엇

package de.retowaelchli.filterit.database; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class SmileyDBAdapter { 

     public static final String ROW_ID = "_id"; 
     public static final String SOURCE = "source"; 
     public static final String INFO = "info"; 

     private static final String DATABASE_TABLE = "admessages"; 

     private DatabaseHelper mDbHelper; 
     private SQLiteDatabase mDb; 

     private final Context mCtx; 

     private static class DatabaseHelper extends SQLiteOpenHelper { 

      DatabaseHelper(Context context) { 
       super(context, DBAdapter.DATABASE_NAME, null, DBAdapter.DATABASE_VERSION); 
      } 

      @Override 
      public void onCreate(SQLiteDatabase db) { 
      } 

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

     /** 
     * Constructor - takes the context to allow the database to be 
     * opened/created 
     * 
     * @param ctx 
     *   the Context within which to work 
     */ 
     public SmileyDBAdapter(Context ctx) { 
      this.mCtx = ctx; 
     } 


     public SmileyDBAdapter open() throws SQLException { 
      this.mDbHelper = new DatabaseHelper(this.mCtx); 
      this.mDb = this.mDbHelper.getWritableDatabase(); 
      return this; 
     } 

     /** 
     * close return type: void 
     */ 
     public void close() { 
      this.mDbHelper.close(); 
     } 


     public long createSmiley(String source, String info){ 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(SOURCE, source); 
      initialValues.put(INFO, info); 
      return this.mDb.insert(DATABASE_TABLE, null, initialValues); 
     } 


     public boolean deleteSmiley(long rowId) { 

      return this.mDb.delete(DATABASE_TABLE, ROW_ID + "=" + rowId, null) > 0; //$NON-NLS-1$ 
     } 


     public Cursor getAllSmileys() { 

      return this.mDb.query(DATABASE_TABLE, new String[] { ROW_ID, 
        SOURCE, INFO }, null, null, null, null, null); 
     } 


     public Cursor getSmiley(long rowId) throws SQLException { 

      Cursor mCursor = 

      this.mDb.query(true, DATABASE_TABLE, new String[] { ROW_ID, SOURCE, 
        INFO }, ROW_ID + "=" + rowId, null, null, null, null, null); 
      if (mCursor != null) { 
       mCursor.moveToFirst(); 
      } 
      return mCursor; 
     } 


     public boolean updateSmiley(long rowId, String source, String info, 
       String cache){ 
      ContentValues args = new ContentValues(); 
      args.put(SOURCE, source); 
      args.put(INFO, info); 

      return this.mDb.update(DATABASE_TABLE, args, ROW_ID + "=" + rowId, null) >0; 
     } 

    } 

이이 테이블의 내 DBAdapter입니다

package de.retowaelchli.filterit.database; 

import android.content.Context; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import de.retowaelchli.filterit.database.ADFilterDBAdapter; 

public class DBAdapter { 

    public static final String DATABASE_NAME = "filterit"; 

    public static final int DATABASE_VERSION = 1; 

    public static final String CREATE_TABLE_ADFILTER = "create table adfilter (_id integer primary key autoincrement, " 
    + ADFilterDBAdapter.NAME+"," 
    + ADFilterDBAdapter.KEYWORD+"," 
    + ADFilterDBAdapter.CACHE + ");"; 

    private static final String CREATE_TABLE_SFILTER = "create table sfilter (_id integer primary key autoincrement, " 
    +SFilterDBAdapter.NAME+"," 
    +SFilterDBAdapter.KEYWORD+"," 
    +SFilterDBAdapter.SMILEY+ ");"; 

    private static final String CREATE_TABLE_ADMESSAGES = "create table admessages (_id integer primary key autoincrement, " 
    +MessagesDBAdapter.PHONENUMBER+"," 
    +MessagesDBAdapter.MESSAGE+ ");"; 

    //HERE I CHANGED IT TO BLOB! 

    private static final String CREATE_TABLE_SMILEY = " create table smiley (_id integer primary key autoincrement, " 
    +SmileyDBAdapter.SOURCE+" BLOB ," 
    +SmileyDBAdapter.INFO+ ");"; 


    private final Context context; 
    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    /** 
    * Constructor 
    * @param ctx 
    */ 
    public DBAdapter(Context ctx) 
    { 
     this.context = ctx; 

    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      db.execSQL(CREATE_TABLE_ADFILTER); 
      db.execSQL(CREATE_TABLE_SFILTER); 
      db.execSQL(CREATE_TABLE_ADMESSAGES); 
      db.execSQL(CREATE_TABLE_SMILEY); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, 
     int newVersion) 
     {    
      // Adding any table mods to this guy here 
     } 
    } 

    /** 
    * open the db 
    * @return this 
    * @throws SQLException 
    * return type: DBAdapter 
    */ 
    public DBAdapter open() throws SQLException 
    { 
     this.DBHelper = new DatabaseHelper(this.context); 
     this.db = this.DBHelper.getWritableDatabase(); 
     return this; 
    } 

    /** 
    * close the db 
    * return type: void 
    */ 
    public void close() 
    { 
     this.DBHelper.close(); 
    } 

} 

. BLOB 타입을 지원합니다. 임 정말

안부

사파리

+0

무엇이 작동하지 않습니까?! 정확한 문제는 무엇입니까? 실제로 아무데도 쓰이지 않는'DBAdapter'를 보았습니다 ... – Knickedi

답변

6

확인 웹 링크 및 저장소에서 이미지 삽입이 코드를 당신의 대답에 미리

들으을 -.- Serval의 시간이 시도 후 좌절 데이터베이스를 BLOB로 저장하고 ImageView에 표시합니다.

자바 코드 :

CategoryDetails.Java

public class CategoryDetails extends Activity { 

public NotesDbAdapter mDbHelper; 
ByteArrayBuffer baf ; 
private Cursor mNotesCursor; 
ImageView img; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    mDbHelper = new NotesDbAdapter(this); 
    mDbHelper.open(); 
    new Task_like_flag().execute(); 

    img=(ImageView)findViewById(R.id.ImageView01); 

} 


public Bitmap convertBlobToBitmap(byte[] blobByteArray) {  
    Bitmap tempBitmap=null;   
    if(blobByteArray!=null) 
    tempBitmap = BitmapFactory.decodeByteArray(blobByteArray, 0, blobByteArray.length); 
    return tempBitmap; 
} 
     public class Task_like_flag extends AsyncTask<String, Void, Void> { 
      private final ProgressDialog dialog = new ProgressDialog(CategoryDetails.this); 
      JSONObject object_feed; 
      // can use UI thread here 
      protected void onPreExecute() { 
       this.dialog.setMessage("Loading..."); 
       this.dialog.setCancelable(false); 
       this.dialog.show(); 
      } 

      @Override 
      protected Void doInBackground(String... params) { 
       URL url = null; 
       try { 
        url = new URL("http://www.theblacksheeponline.com/uploaded/Quick_images/681314276069brewehas.jpg"); 
       } catch (MalformedURLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } //http://example.com/image.jpg 
       //open the connection 
       URLConnection ucon = null; 
       try { 
        ucon = url.openConnection(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       //buffer the download 
       InputStream is = null; 
       try { 
        is = ucon.getInputStream(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       BufferedInputStream bis = new BufferedInputStream(is,128); 
       baf = new ByteArrayBuffer(128); 
       //get the bytes one by one 
       int current = 0; 
       try { 
        while ((current = bis.read()) != -1) { 
          baf.append((byte) current); 
        } 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
        mDbHelper.createNote(baf.toByteArray()); 
       return null; 
      } 

       @Override 
       protected void onPostExecute(Void result) { 
        byte[] imageByteArray; 
        Bitmap theImage = null; 
       try{ 
         mNotesCursor = mDbHelper.fetchAllNotes(); 
         startManagingCursor(mNotesCursor); 

        if (mNotesCursor.moveToFirst()) { 


         do { 
          imageByteArray = mNotesCursor.getBlob(mNotesCursor.getColumnIndex(NotesDbAdapter.KEY_IMAGE)); 
          ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray); 
          theImage= BitmapFactory.decodeStream(imageStream); 

         } while (mNotesCursor.moveToNext()); 
        } 
       }catch(Exception e){ 
        Log.v("Excep", ""+e); 
       } 
       img.setImageBitmap(theImage); 
        if (this.dialog.isShowing()) { 
         this.dialog.dismiss(); 
        } 
       } 
      } 

    } 

public class NotesDbAdapter { 

public static final String KEY_CATEGORY = "category"; 
public static final String KEY_DATE = "notes_date"; 
public static final String KEY_DESC = "item_desc"; 
public static final String KEY_PRIZE = "item_prize"; 
public static final String KEY_MODE = "mode"; 
public static final String KEY_MONTH = "month"; 
public static final String KEY_IMAGE = "img"; 


public static final String KEY_ROWID = "_id"; 

private static final String TAG = "NotesDbAdapter"; 
private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 

/** 
* Database creation sql statement 
*/ 
private static final String DATABASE_CREATE = 
     "create table notes (_id integer primary key autoincrement, " 
       + "img BLOB not null);"; 



private static final String DATABASE_NAME = "data"; 
private static final String DATABASE_TABLE = "notes"; 
private static final int DATABASE_VERSION = 2; 

private final Context mCtx; 

private static class DatabaseHelper extends SQLiteOpenHelper { 

    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS notes"); 
     onCreate(db); 
    } 
} 

/** 
* Constructor - takes the context to allow the database to be 
* opened/created 
* 
* @param ctx the Context within which to work 
*/ 
public NotesDbAdapter(Context ctx) { 
    this.mCtx = ctx; 
} 

/** 
* Open the notes database. If it cannot be opened, try to create a new 
* instance of the database. If it cannot be created, throw an exception to 
* signal the failure 
* 
* @return this (self reference, allowing this to be chained in an 
*   initialization call) 
* @throws SQLException if the database could be neither opened or created 
*/ 
public NotesDbAdapter open() throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    mDbHelper.close(); 
} 


/** 
* Create a new note using the title and body provided. If the note is 
* successfully created return the new rowId for that note, otherwise return 
* a -1 to indicate failure. 
* 
* @param title the title of the note 
* @param body the body of the note 
* @return rowId or -1 if failed 
*/ 
public long createNote(byte[] img) { 
    byte yes[]=img; 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_IMAGE, yes); 
    Log.v("row", ""+mDb.insert(DATABASE_TABLE, null, initialValues)); 
    return mDb.insert(DATABASE_TABLE, null, initialValues); 

} 


/** 
* Return a Cursor over the list of all notes in the database 
* 
* @return Cursor over all notes 
*/ 
public Cursor fetchAllNotes() { 
    return mDb.query(DATABASE_TABLE, null, null, null, null, null, null); 
} } 

main.xml에 NotesDbAdapter.Class :

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

    <ImageView  android:id="@+id/ImageView01"  android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/icon"/> 
</LinearLayout> 

문제가 있으면 알려주세요.

감사 Venky ..

+0

Thx Venky 나는 내일 그것을 자세히 볼 것입니다! – safari

+0

02-11 12 : 57 : 11.899 : W/System.err (21147) : java.lang.NullPointerException 02-11 12 : 57 : 11.930 : W/System.err (21147) : \t at com.bridge.app .ImageDatabase.createNote (ImageDatabase.java:106) 02-11 12 : 57 : 11.934 : W/System.err (21147) : \t at com.bridge.app.GridImageLoader.getBitmap (GridImageLoader.java:192) 02 -11 12 : 57 : 11.969 : W/System.err (21147) : \t com.bridge.app.GridImageLoader.access $ 0 (GridImageLoader.java:118) 02-11 12 : 57 : 12.059 : W/System. 오류 (21147) : \t at com.bridge.app.GridImageLoader $ PhotosLoader.run (GridImageLoader.java:287)이게 나를 위해 작동하지 않습니다 – Mahesh

+0

이게 저에게 효과가 없습니다. 내가 잘못 생각한 곳을 말해 줄 수 있습니까? – Mahesh

관련 문제