2016-02-26 129 views
0

我正在開發和android quizz應用程序,我有兩個問題。 首先我不能更新的問題,第二我想存儲圖片與數據庫中的問題。這是我的數據庫代碼 有沒有人可以幫助我? 謝謝添加圖片到q測驗應用程序的數據庫

package com.example.toureamidou.piste; 

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

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by TOURE Amidou on 24/02/2016. 
*/ 
public class DatabaseHelper extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "Question"; 
    private static final String TABLE_QUEST = "quest"; 
    private static final String KEY_ID = "id"; 
    private static final String KEY_QUES = "question"; 
    private static final String KEY_ANSWER = "answer"; 
    private static final String KEY_OPTA= "opta"; 
    private static final String KEY_OPTB= "optb"; 
    private static final String KEY_OPTC= "optc"; 
    private SQLiteDatabase dbase; 
    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME,null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     dbase=db; 
     String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_QUEST + " (" 
       + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_QUES 
       + " TEXT, " + KEY_ANSWER+ " TEXT, "+KEY_OPTA +" TEXT, " 
       +KEY_OPTB +" TEXT, "+KEY_OPTC+" TEXT)"; 
     db.execSQL(sql); 
     addQuestions(); 

    } 

    private void addQuestions() { 
     Questions q1=new Questions("FFFFF","Tata", "Titi", "Toto", "Tata"); 
     this.addQuestion(q1); 
     Questions q2=new Questions("Quel est le plus grand pays au monde", "Suisse", "Italie", "Chine", "Chine"); 
     this.addQuestion(q2); 
     Questions q3=new Questions("Comment s'appele le président francais","Obama", "Hollande","Gorbatchev", "Hollande"); 
     this.addQuestion(q3); 
     Questions q4=new Questions("zzzzzzzzzzzzzzzzzzzz", "ali", "dede", "home","dede"); 
     this.addQuestion(q4); 
     Questions q5=new Questions("Quel est l'homme le plus riche au monde","Gates","Trump","Carlos Slim","Trump"); 
     this.addQuestion(q5); 

    } 

    private void addQuestion(Questions quest) { 
     Log.d("addQuestions", quest.toString()); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_QUES, quest.getQUESTION()); 
     values.put(KEY_ANSWER, quest.getANSWER()); 
     values.put(KEY_OPTA, quest.getOPTA()); 
     values.put(KEY_OPTB, quest.getOPTB()); 
     values.put(KEY_OPTC, quest.getOPTC()); 
     dbase.insert(TABLE_QUEST, null, values); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUEST); 
     onCreate(db); 
    } 
    public List<Questions> getAllQuestions() { 
     List<Questions> quesList = new ArrayList<Questions>(); 
     String selectQuery = "SELECT * FROM " + TABLE_QUEST; 
     dbase=this.getReadableDatabase(); 
     Cursor cursor = dbase.rawQuery(selectQuery, null); 
     if (cursor.moveToFirst()) { 
      do { 
       Questions quest = new Questions(); 
       quest.setID(cursor.getInt(0)); 
       quest.setQUESTION(cursor.getString(1)); 
       quest.setANSWER(cursor.getString(2)); 
       quest.setOPTA(cursor.getString(3)); 
       quest.setOPTB(cursor.getString(4)); 
       quest.setOPTC(cursor.getString(5)); 
       quesList.add(quest); 
      } while (cursor.moveToNext()); 
     } 

     return quesList; 
    } 
    public int updateQuestions (Questions questions){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("questions",questions.getQUESTION()); 
     contentValues.put("answer",questions.getANSWER()); 
     contentValues.put("opta",questions.getOPTA()); 
     contentValues.put("optb",questions.getOPTB()); 
     contentValues.put("optc",questions.getOPTC()); 
     int i = db.update(TABLE_QUEST, contentValues, KEY_ID + " = ?", new String[]{String.valueOf(questions.getID())}); 
     db.close(); 
     return i; 

    } 

} 

回答

1

爲了使數據庫記錄「粘」你需要在一個交易。

db.getWritableDatabase(); 
db.beginTransaction(); 
...INSERT, UPDATE, DELETE 
if (ok) { 
    db.setTransactionSuccessful(); 
} 
db.endTransaction(); 
db.close(); 

圖像可以存儲在BLOB列中。

+0

啊thanks.In我的代碼試圖用更新的圖像加載我更新方法,但我沒有找到。 –

+0

我不明白你說什麼。 –

+0

基本上你必須在一個事務中...並且提交它(使用setTransactionSucessful()讓記錄在你結束函數後保持不變,否則它會回滾(移除!!) –

0

變化圖像成字節{}

Bitmap b=BitmapFactory.decodeResource(getResources(),R.drawable.androidpics); 
    ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
    b.compress(Bitmap.CompressFormat.PNG, 100, bos); 
    img=bos.toByteArray(); 

插入圖像到數據庫 ............................ ....................

db=h.getWritableDatabase(); 
    btninsert.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    ContentValues cv=new ContentValues(); 
      cv.put("image", img); 
      db.insert("tableimage", null, cv); 
      System.out.println("image insert successfully..............................."); 


    } 
    } 

);

+0

嗨高拉夫你能幫我在我的代碼?因爲我不明白。對於實例這是我的課堂問題,我用questiosn和答案出現 –

+0

我不能發佈對不起 –

+0

當我在android工作室說我的方法getResources不存在。必須創建它嗎? –

1

使用此,讓你的圖像作爲字符串,並將其保存

public String getStringImage() { 

    if (bitmap != null) { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     byte[] imageBytes = baos.toByteArray(); 
     String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
     return encodedImage; 
    } else { 
     return null; 
    } 

} 
+0

好的,謝謝,我會試試 –

+0

@AmidouFlorianTouré歡迎您在形式upvote或接受答案中表示感謝 –

3

另一種方式你也可以用資產的文件夾

//load image 
try { 
    // get input stream 
    InputStream ims = getAssets().open("avatar.jpg"); 
    // load image as Drawable 
    Drawable d = Drawable.createFromStream(ims, null); 
    // set image to ImageView 
    mImage.setImageDrawable(d); 
} 
catch(IOException ex) 
{ 
    ex.printStackTrace(); 
} 
相關問題