2016-02-29 110 views
0

嗨,我有一个问题,当插入一个android图像在我的数据库quizz应用程序。问题必须出现一个特定的图像,我特里做有人解释我在这里,但我有一个错误我的方法,我添加questions.I插入图像像这样。在sqlite数据库中添加图像

这是我的数据库

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 static final String KEY_IMAGE = "image"; 
    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,"+KEY_IMAGE+"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(" est l'homme le plus riche au monde","Gates","Trump","Carlos Slim","Trump"); 
     this.addQuestion(q5); 

    } 






    private void addQuestion(Questions quest,byte[] image) { 
     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()); 
     values.put(KEY_IMAGE,image); 
     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; 

    } 

} 

and this is my quizz activity class 


package com.example.toureamidou.piste; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.TextView; 

import java.io.ByteArrayOutputStream; 
import java.util.List; 
public class Quiz extends AppCompatActivity { 
    List<Questions> quesList; 
    int qid=0; 
    Questions currentQ; 
    TextView txtQuestion; 
    RadioButton rda, rdb, rdc; 
    Button butNext; 
    DatabaseHelper myDb; 
    MediaPlayer wrongsound; 
    MediaPlayer winsound; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_quiz); 
     myDb = new DatabaseHelper(this); 
     quesList = myDb.getAllQuestions(); 
     currentQ=quesList.get(qid); 
     txtQuestion=(TextView)findViewById(R.id.textView1); 
     rda=(RadioButton)findViewById(R.id.radio0); 
     rdb=(RadioButton)findViewById(R.id.radio1); 
     rdc=(RadioButton)findViewById(R.id.radio2); 
     butNext=(Button)findViewById(R.id.button1); 
     wrongsound = MediaPlayer.create(this,R.raw.mywrong); 
     winsound = MediaPlayer.create(this,R.raw.mysound); 
     setQuestionsView(); 

     Bitmap b = BitmapFactory.decodeResource(getResources(),R.drawable.quizz); 
     ByteArrayOutputStream boss = new ByteArrayOutputStream(); 
     b.compress(Bitmap.CompressFormat.PNG,100,boss); 
     byte[] img = boss.toByteArray(); 


     butNext.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       RadioGroup grp = (RadioGroup) Quiz.this.findViewById(R.id.radioGroup1); 
       RadioButton answer = (RadioButton) Quiz.this.findViewById(grp.getCheckedRadioButtonId()); 
       Log.d("your answer", Quiz.this.currentQ.getANSWER() + " " + answer.getText()); 
       if (Quiz.this.currentQ.getANSWER().equals(answer.getText())) { 

        winsound.start(); 
       } else { 
        wrongsound.start(); 
       } 

       if (Quiz.this.qid < 5) { 
        Quiz.this.currentQ = (Questions) Quiz.this.quesList.get(Quiz.this.qid); 
        Quiz.this.setQuestionsView(); 
       } else { 
        Intent intent = new Intent(Quiz.this, Result.class); 
        Bundle b = new Bundle(); 

        intent.putExtras(b); 
        Quiz.this.startActivity(intent); 
        Quiz.this.finish(); 
       } 

      } 
     }); 



    } 



    private void setQuestionsView() { 
     txtQuestion.setText(currentQ.getQUESTION()); 
     rda.setText(currentQ.getOPTA()); 
     rdb.setText(currentQ.getOPTB()); 
     rdc.setText(currentQ.getOPTC()); 
     qid++;         


    } 







} 
+4

腹胀与图像(或任何其他大量的数据),你的数据库是不是一个好主意。相反,您最好存储图像位置并从那里加载图像。 –

+0

[如何在sqlite数据库中存储图像]可能的重复(http://stackoverflow.com/questions/9357668/how-to-store-image-in-sqlite-database) – myatmins

回答

0

您需要这样做:

如果你想存储在字节数组形式大于image列必须在BLOB格式的图像。

@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,"+KEY_IMAGE+" BLOB)"; 
    db.execSQL(sql); 
    addQuestions(); 
} 

注:卸载当前的应用程序,然后重新运行。

希望这会有道理。

0

将图像转换为Base64字符串,然后将其保存在数据库中。

当您使用从数据库中获取数据。然后将字符串转换为Base64图像。

的过程是我的回答下面的链接

How to convert image into bit plane in android?

相关问题