我的图片无法保存在我的数据库中

时间:2017-10-11 00:29:27

标签: java android database image android-sqlite

我可以让我的数据库保存图像。它们显示在listView中 但是当我关闭应用程序时,数据将被删除。

DataBaseHandler.java:

public class DataBaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 2;


    public static final String DATABASE_NAME = "Preguntas_y_Respuestas_Manager",
            TABLE_PyR = "PreguntasYRespuestas",
            KEY_ID = "id",
            KEY_PREGUNTA = "pregunta",
            KEY_RESPUESTA = "respuesta",
            KEY_IMAGEURI = "imagen";


    public DataBaseHandler(Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);


    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + TABLE_PyR + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_PREGUNTA + " TEXT," + KEY_RESPUESTA + " TEXT, " + KEY_IMAGEURI + " TEXT)");

    }

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

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_PyR);

        onCreate(db);

    }

    public void createPregunta_y_Respuesta(PreguntasYRespuestas pYr) {

        SQLiteDatabase db = getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(KEY_PREGUNTA, pYr.getPregunta());
        values.put(KEY_RESPUESTA, pYr.getRespuesta());
        values.put(KEY_IMAGEURI,pYr.get_imageUri().toString());

        db.insert(TABLE_PyR, null, values);
        db.close();

    }

    public PreguntasYRespuestas getPyR(int id) {

        SQLiteDatabase db = getReadableDatabase();

        Cursor cursor = db.query(TABLE_PyR, new String[]{KEY_ID, KEY_PREGUNTA, KEY_RESPUESTA, KEY_IMAGEURI}, KEY_ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        PreguntasYRespuestas preg_y_resp = new PreguntasYRespuestas(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), Uri.parse(cursor.getString(3)));
        db.close();
        return preg_y_resp;

    }

    public void deletePregunta(PreguntasYRespuestas pyr) {

        SQLiteDatabase db = getWritableDatabase();
        int cant = db.delete("PreguntasYRespuestas", "id=" + KEY_ID, null);

    }

    public int getPreguntasCount() {

        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_PyR, null);

        int count = cursor.getCount();
        db.close();
        cursor.close();

        return count;
    }


    public int UpdatePregunta(PreguntasYRespuestas pyr) {

        SQLiteDatabase db = getReadableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_PREGUNTA, pyr.getPregunta());
        values.put(KEY_RESPUESTA, pyr.getRespuesta());
        values.put(KEY_IMAGEURI, pyr.get_imageUri().toString());

        int rowsAffected = db.update(TABLE_PyR, values, KEY_ID + "=?", new String[]{String.valueOf(pyr.getId())});
        db.close();

        return rowsAffected;

    }


    public List<PreguntasYRespuestas> getAllPreguntas() {

        List<PreguntasYRespuestas> pyr = new ArrayList<PreguntasYRespuestas>();

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_PyR, null);

        if (cursor.moveToFirst()) {

            do {
                pyr.add(new PreguntasYRespuestas(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2),Uri.parse(cursor.getString(3))));
            }
            while (cursor.moveToNext());
        }
        cursor.close();
        db.close();
        return pyr;
    }

}

RegistroDePreguntas_Cuestionario.java:

public class RegistroDePreguntas_Cuestionario extends AppCompatActivity {
    private static final int EDIT = 0, DELETE = 1;

    public Button agregar, iniciar;
    public ImageView imagen;
    public EditText et_pregunta, et_respuesta;
    public ListView listView_preguntas;
    Uri imageUri = null;

    DataBaseHandler dbHandler;
    int longClickedItemIndex;
    ArrayAdapter<PreguntasYRespuestas> preguntasAdapter;


    List<PreguntasYRespuestas> mListaPreguntas = new ArrayList<>();

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

        agregar = (Button) findViewById(R.id.agregar);
        et_pregunta = (EditText) findViewById(R.id.Et_pregunta);
        et_respuesta = (EditText) findViewById(R.id.Et_respuesta);
        imagen = (ImageView)findViewById(R.id.imageView);
        iniciar = (Button) findViewById(R.id.iniciar);
        listView_preguntas = (ListView) findViewById(R.id.listview_preguntas);
        dbHandler = new DataBaseHandler(getApplicationContext());
        TabHost tabHost = (TabHost) findViewById(R.id.tabHost_Preg_Cuest);


        tabHost.setup();

        TabHost.TabSpec tabSpec = tabHost.newTabSpec("creator");
        tabSpec.setContent(R.id.Creador);
        tabSpec.setIndicator("Crear");
        tabHost.addTab(tabSpec);

        tabSpec = tabHost.newTabSpec("visualizacion");
        tabSpec.setContent(R.id.Visualizacion);
        tabSpec.setIndicator("Ver");
        tabHost.addTab(tabSpec);



        registerForContextMenu(listView_preguntas);

        listView_preguntas.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                longClickedItemIndex = position;
                return false;
            }
        });


        iniciar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(RegistroDePreguntas_Cuestionario.this, ActivityCuestionario.class));
            }
        });

        agregar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                PreguntasYRespuestas pyr = new PreguntasYRespuestas(dbHandler.getPreguntasCount(), String.valueOf(et_pregunta.getText()), String.valueOf(et_respuesta.getText()),imageUri);
                if (!preguntaExists(pyr)) {
                    dbHandler.createPregunta_y_Respuesta(pyr);
                    mListaPreguntas.add(pyr);
                    preguntasAdapter.notifyDataSetChanged();
                    Toast.makeText(getApplicationContext(), "Tu pregunta ha sido añadida", Toast.LENGTH_SHORT).show();
                    et_pregunta.setText("");
                    et_respuesta.setText("");
                    imageUri = null;
                    return;


                }

                Toast.makeText(getApplicationContext(), "Ya existe una pregunta igual, no pueden haber 2 preguntas iguales", Toast.LENGTH_SHORT).show();


            }
        });
        imagen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent,"Select Contact Image"),1);
            }
        });


        et_pregunta.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                agregar.setEnabled(String.valueOf(et_pregunta.getText()).trim().length() > 0);


            }

            @Override
            public void afterTextChanged(Editable s) {


            }
        });

        if (dbHandler.getPreguntasCount() != 0) {
            mListaPreguntas.addAll(dbHandler.getAllPreguntas());

            populateList();
        }
    }


    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {

        super.onCreateContextMenu(menu, view, menuInfo);

        menu.setHeaderIcon(R.drawable.edit);
        //Icon made by [http://www.flaticon.com/authors/madebyoliver] from www.flaticon.com
        menu.setHeaderTitle("Opciones");
        menu.add(Menu.NONE, DELETE, menu.NONE, "Eliminar pregunta");


    }


    public void onActivityResult(int reqCode, int resCode, Intent data){
        if (resCode==RESULT_OK){
            if (reqCode==1){
                imageUri = data.getData();
                imagen.setImageURI(data.getData());
            }
        }

    }

    public boolean onContextItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case EDIT:
                dbHandler.UpdatePregunta(mListaPreguntas.get(longClickedItemIndex));
                preguntasAdapter.notifyDataSetChanged();
                break;
            case DELETE:

                dbHandler.deletePregunta(mListaPreguntas.get(longClickedItemIndex));
                mListaPreguntas.remove(longClickedItemIndex);
                preguntasAdapter.notifyDataSetChanged();

                break;

        }

        return super.onContextItemSelected(item);

    }


    private boolean preguntaExists(PreguntasYRespuestas pyr) {

        String pregunta = pyr.getPregunta();
        int preguntaCount = mListaPreguntas.size();

        for (int i = 0; i < preguntaCount; i++) {
            if (pregunta.compareToIgnoreCase(mListaPreguntas.get(i).getPregunta()) == 0)
                return true;
        }

        return false;

    }


    public void populateList() {
        preguntasAdapter = new mListAdapter();
        listView_preguntas.setAdapter(preguntasAdapter);
    }

    public class mListAdapter extends ArrayAdapter<PreguntasYRespuestas> {

        public mListAdapter() {
            super(RegistroDePreguntas_Cuestionario.this, R.layout.listview_item, mListaPreguntas);
        }

        @Override
        public View getView(int position, View view, ViewGroup parent) {

            if (view == null)

                view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);

            PreguntasYRespuestas currentPregunta = mListaPreguntas.get(position);

            TextView tv_pregunta = (TextView) view.findViewById(R.id.tv_pregunta);
            tv_pregunta.setText(currentPregunta.getPregunta());

            TextView tv_respuesta = (TextView) view.findViewById(R.id.tv_respuesta);
            tv_respuesta.setText(currentPregunta.getRespuesta());

            ImageView imageView_Lista = (ImageView) view.findViewById(R.id.imageView_Lista);
            imageView_Lista.setImageURI(currentPregunta.get_imageUri());

            return view;
        }
    }


}

0 个答案:

没有答案