2015-04-06 64 views
0

我想插入圖像到一個sqlite數據庫使用blob我不想存儲在存儲卡中的圖像,並從它讀取因爲我不希望用戶有權訪問它。我在表中稱爲圖像.The DATAS一排來自於一個MySQL數據庫從URL插入圖像到Sqlite表

package com.mall.our; 

import java.io.ByteArrayOutputStream; 
import java.util.ArrayList; 
import java.util.HashMap; 

import android.content.ContentValues; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.preference.PreferenceManager; 
import android.util.Log; 

public class DBTool extends SQLiteOpenHelper { 
    private Context appContext; 
    static final String firstname="firstname"; 
    static final String lastname="lastname"; 

    public DBTool(Context applicationContext){ 

     super(applicationContext, "friend.db", null, 1); 
     this.appContext = applicationContext; 

    } 
    @Override 
    public void onCreate(SQLiteDatabase database) { 

       String query = "CREATE TABLE friends (contactId INTEGER PRIMARY KEY, name TEXT, " + 
         "message TEXT, image BLOB)"; 
       database.execSQL(query); 
    } 

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

     String query = "DROP TABLE IF EXISTS friends"; 

     database.execSQL(query); 
     onCreate(database); 

    } 
    public void insertContact(HashMap<String, String> queryValues){ 

     SQLiteDatabase database = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put("name", queryValues.get("name")); 
     values.put("message", queryValues.get("message")); 
     values.put("image", queryValues.get("image")); 
     database.insert("friends", null, values); 

     database.close(); 

    } 
public ArrayList<HashMap<String, String>> getAllContacts(){ 

     ArrayList<HashMap<String, String>> contactArrayList = new ArrayList<HashMap<String, String>>(); 

String selectQuery = "SELECT * FROM friends"; 

     SQLiteDatabase database = this.getWritableDatabase(); 

     Cursor cursor = database.rawQuery(selectQuery, null); 

     if(cursor.moveToFirst()){ 

      do{ 

       HashMap<String, String> contactMap = new HashMap<String, String>(); 


       contactMap .put("name", cursor.getString(0)); 
       contactMap .put("message", cursor.getString(1)); 
       contactMap .put("image", cursor.getString(2)); 

       contactArrayList.add(contactMap); 

      } while(cursor.moveToNext()); 

     } 

     return contactArrayList; 

    } 
    public int updateContact(HashMap<String, String> queryValues){ 

     SQLiteDatabase database = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put("name", queryValues.get("name")); 
     values.put("message", queryValues.get("message")); 
     values.put("image", queryValues.get("image")); 


     return database.update("friends", values, 
       "contactId" + " = ?", new String[] {queryValues.get("contactId") }); 

    } 

    public void deleteContact(){ 

     SQLiteDatabase database = this.getWritableDatabase(); 

     String deleteQuery = "DELETE FROM friends "; 

     database.execSQL(deleteQuery); 

    } 


    public HashMap<String, String> getContactInfo(String id){ 

     HashMap<String, String> contactMap = new HashMap<String, String>(); 

     SQLiteDatabase database = this.getReadableDatabase(); 

     String selectQuery = "SELECT * FROM friends WHERE contactId='" + id + "'"; 

     Cursor cursor = database.rawQuery(selectQuery, null); 

     if(cursor.moveToFirst()){ 

      do{ 

       contactMap.put("name", cursor.getString(0)); 
       contactMap.put("message", cursor.getString(1)); 
       contactMap.put("image", cursor.getString(2)); 

      } while(cursor.moveToNext()); 

     } 

     return contactMap; 

    } 

} 

這是我的其他類

package com.mall.our; 

import java.io.IOException; 

    import java.net.URL; 
    import java.io.InputStream; 
    import java.net.HttpURLConnection; 
    import java.util.ArrayList; 
    import java.util.HashMap; 
    import java.util.List; 
    import org.apache.http.NameValuePair; 
    import org.apache.http.message.BasicNameValuePair; 
    import org.json.JSONArray; 
    import org.json.JSONObject; 
    import android.app.ProgressDialog; 
    import android.content.Intent; 
    import android.content.SharedPreferences; 
    import android.content.SharedPreferences.Editor; 
    import android.graphics.Bitmap; 
    import android.graphics.BitmapFactory; 
    import android.os.AsyncTask; 
    import android.os.Bundle; 
    import android.preference.PreferenceManager; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AdapterView; 
    import android.widget.BaseAdapter; 
    import android.widget.ImageView; 
    import android.widget.ListView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.TextView; 

    import com.actionbarsherlock.app.SherlockListFragment; 

    import com.mall.first.JSONParser; 
    import com.mall.first.R; 


    public class Chat extends SherlockListFragment { 
     JSONParser jsonParser = new JSONParser(); 
     private static final String TAG_POSTS = "posts"; 
     public static final String TAG_ID = "id"; 
     public static final String TAG_NAME = "name"; 
     public static final String TAG_pic = "pic"; 
     public static final String TAG_MESSAGE = "message"; 
     public static final String TAG_CATEGORIES_LOGO = "categories_logo"; 
     DBTool dbTool = new DBTool(getActivity()); 
     /* 
     user details 
     private static final String NAME = "name"; 
     private static final String AGE = "age"; 
     private static final String STATUS = "status"; 
     private static final String PIC = "pic"; 
     private static final String SEX = "sex"; String friendname,status; 

     private static final String TAG_SUCCESS = "success";*/ 
      //user 


     private static final String URL = "http://10.0.2.2/ochat/chattingname.php"; 
     private static final String URL_CATEGORY = "http://10.0.2.2/ochat/selectchat.php"; 

      private BaseAdapter mAdapter; 
      private ListView lv; 
      SharedPreferences sp ; 
      Bundle bon = new Bundle(); 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.friends, container, false); 
      return rootView; 
     } 
     @Override 
      public void onActivityCreated(Bundle savedInstanceState) { 
       super.onActivityCreated(savedInstanceState); 
       new LoadComments().execute(); 


    } 

     class LoadComments extends AsyncTask<Void, Void, ArrayList<HashMap<String,String>>> { 
       private ProgressDialog pDialog; 
       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 
        pDialog = new ProgressDialog(getActivity()); 

        pDialog.setIndeterminate(false); 
        pDialog.setCancelable(true); 

       } 

       @Override 
       protected ArrayList<HashMap<String, String>> doInBackground(Void... arg0) { 

         ArrayList<HashMap<String, String>> categoryList = new ArrayList<HashMap<String, String>>(); 

        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
        String username = sp.getString("username", "anon"); 
         List<NameValuePair> params = new ArrayList<NameValuePair>(); 
         params.add(new BasicNameValuePair("username", username)); 
         JSONObject json = jsonParser.makeHttpRequest(URL_CATEGORY, "POST", 
           params); 

         try { 

          JSONArray categories = json.getJSONArray(TAG_POSTS); 
          for (int i = 0; i < categories.length(); i++) { 
           String id = categories.getJSONObject(i).getString("TAG_ID"); 
           String name = categories.getJSONObject(i).getString("TAG_NAME"); 
           String pic = categories.getJSONObject(i).getString("TAG_pic"); 
           String message = categories.getJSONObject(i).getString("TAG_MESSAGE"); 

          HashMap<String, String> queryValuesMap = new HashMap<String, String>(); 

          queryValuesMap.put("name", name); 
          queryValuesMap.put("image", pic); 
          queryValuesMap.put("message",message); 

          dbTool.insertContact(queryValuesMap); 


          } 
         }catch (Throwable e){ 
          e.printStackTrace(); 
         } 
         return categoryList; 
        } 

       @Override 
       protected void onPostExecute(ArrayList<HashMap<String, String>> result) { 
        super.onPostExecute(result); 


       } 
      } 

      } 

我的問題是如何轉換「字符串PIC」變量中Chat.java class是圖像的數組或url。我如何將它轉換爲位圖,這樣我就可以在桌面上進行昆蟲處理了?

+1

作爲谷歌表示: - 如果處理不打算對其他應用程序使用(如只有你的應用程序中使用的圖形紋理或聲音效果)的文件,應通過調用getExternalFilesDir()在外部存儲上使用專用存儲目錄。此方法還使用類型參數來指定子目錄的類型(如DIRECTORY_MOVIES)。如果您不需要特定的媒體目錄,請傳遞null以接收應用程序專用目錄的根目錄。 參考:-http://developer.android.com/guide/topics/data/data-storage.html – 2015-04-06 12:18:23

+0

它不建議將圖像存儲到數據庫 – Anuj 2015-04-06 13:45:04

回答

0

在此代碼下使用ArrayList,並將每個圖像url添加到此代碼中。

ArrayList<String> list = new ArrayList<String>(); list.add(pic); 

使用此代碼將drawable轉換爲位圖。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    // converting drawable to bitmap 
    _bitmapToInsert = ((BitmapDrawable) getResources().getDrawable(
      R.drawable.skholingua)).getBitmap(); 
    // compressing bitmap 
    _bitmapToInsert.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    // converting bitmap to byte array 
    _photoToInsert = baos.toByteArray(); 
    // inserting into to database 
    _sqlLiteManger.insert(_photoToInsert); 

更多閱讀:http://www.skholingua.com/android-basic/advance-topics/database-storage

+0

我不想轉換drawable我想轉換url圖像 – arinze 2015-04-06 16:59:45