Commit a8f9bef9 authored by Lucas NAURY's avatar Lucas NAURY

Add images in DB

parent 0d481251
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
......
......@@ -26,11 +26,11 @@ public class DBHelper extends SQLiteOpenHelper {
static final String DB_NAME = "LEBONCOIN.DB";
// database version
static final int DB_VERSION = 2;
static final int DB_VERSION = 3;
// Creating table query
private static final String CREATE_TABLE = "create table " + TABLE_NAME + "(" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + TITLE + " TEXT NOT NULL, " + ADDRESS + " TEXT, " + IMAGE + " TEXT, " + PRICE + " DOUBLE, " + DESCRIPTION + " TEXT);";
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + TITLE + " TEXT NOT NULL, " + ADDRESS + " TEXT, " + IMAGE + " BLOB, " + PRICE + " DOUBLE, " + DESCRIPTION + " TEXT);";
public DBHelper(Context context) {
super(context,
......@@ -64,12 +64,10 @@ public class DBHelper extends SQLiteOpenHelper {
String title = data.getString(data.getColumnIndexOrThrow(TITLE));
String address = data.getString(data.getColumnIndexOrThrow(ADDRESS));
String image = data.getString(data.getColumnIndexOrThrow(IMAGE));
byte[] image = data.getBlob(data.getColumnIndexOrThrow(IMAGE));
double price = data.getDouble(data.getColumnIndexOrThrow(PRICE));
String description = data.getString(data.getColumnIndexOrThrow(DESCRIPTION));
data.close();
return new Annonce(title, address, image, price, description);
}
}
......@@ -11,11 +11,11 @@ public class Annonce implements Parcelable {
private String titre;
private String adresse;
private double prix;
private String image;
private byte[] image;
private String description;
// Constructeur
public Annonce(String titre, String adresse, String image, double prix, String description) {
public Annonce(String titre, String adresse, byte[] image, double prix, String description) {
this.titre = titre;
this.adresse = adresse;
this.image = image;
......@@ -37,7 +37,7 @@ public class Annonce implements Parcelable {
public double getPrix(){return prix;}
public String getAdresse(){return adresse;}
public String getImage(){return image;}
public byte[] getImage(){return image;}
public String getDescription(){return description;}
......@@ -53,7 +53,10 @@ public class Annonce implements Parcelable {
parcel.writeString(adresse);
parcel.writeDouble(prix);
parcel.writeString(image);
parcel.writeInt(image.length);
parcel.writeByteArray(image);
parcel.writeString(description);
parcel.writeInt(id);
}
......@@ -70,8 +73,12 @@ public class Annonce implements Parcelable {
private Annonce(Parcel in) {
titre = in.readString();
adresse = in.readString();
prix = in.readDouble();
image = in.readString();
image = new byte[in.readInt()];
in.readByteArray(image);
description = in.readString();
id = in.readInt();
}
......
......@@ -3,6 +3,7 @@ package com.example.tpleboncoin.ui.ajout_annonce;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
......@@ -30,6 +31,8 @@ import com.example.tpleboncoin.db.DBManager;
import com.example.tpleboncoin.models.Annonce;
import com.google.android.material.snackbar.Snackbar;
import java.io.ByteArrayOutputStream;
public class AjoutAnnonceFragment extends Fragment {
private FragmentAjoutAnnonceBinding binding;
......@@ -50,11 +53,12 @@ public class AjoutAnnonceFragment extends Fragment {
final EditText adresseAnnonce = binding.adresseAnnonce;
final EditText prixAnnonce = binding.prixAnnonce;
final EditText descriptionAnnonce = binding.descriptionAnnonce;
final ImageView imageAnnonce = binding.imageAnnonce;
final Button boutonCreation = binding.boutonAjoutAnnonce;
// Initialisation de la DB
DBManager dbManager = DBManager.getDBManager(this.getContext());
dbManager.open();
dbManager.open(this.getContext());
boutonCreation.setOnClickListener(new View.OnClickListener() {
......@@ -68,8 +72,14 @@ public class AjoutAnnonceFragment extends Fragment {
return;
}
// On convertit l'image en byte array
Bitmap bitmap = ((BitmapDrawable) imageAnnonce.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageInByte = baos.toByteArray();
// On créé l'objet de la nouvelle annonce
Annonce nouvelleAnnonce = new Annonce(titreAnnonce.getText().toString(), adresseAnnonce.getText().toString(), "", Double.parseDouble(prixAnnonce.getText().toString()), descriptionAnnonce.getText().toString());
Annonce nouvelleAnnonce = new Annonce(titreAnnonce.getText().toString(), adresseAnnonce.getText().toString(), imageInByte, Double.parseDouble(prixAnnonce.getText().toString()), descriptionAnnonce.getText().toString());
//On ajoute la nouvelle annonce à la DB
dbManager.insert(nouvelleAnnonce);
......@@ -83,7 +93,6 @@ public class AjoutAnnonceFragment extends Fragment {
final Button boutonAppareilPhoto = binding.photoBtn;
final Button boutonGalerie = binding.galerieBtn;
final ImageView imageAnnonce = binding.imageAnnonce;
boutonGalerie.setOnClickListener(new View.OnClickListener() {
@Override
......
......@@ -4,10 +4,13 @@ package com.example.tpleboncoin.ui.home;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.activity.result.contract.ActivityResultContracts;
......@@ -17,6 +20,8 @@ import com.example.tpleboncoin.R;
import com.example.tpleboncoin.models.Annonce;
import com.example.tpleboncoin.ui.DetailScreen;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
......@@ -31,6 +36,7 @@ public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView titreTextView;
private final ImageView imageView;
private final TextView adresseTextView;
private final TextView prixTextView;
......@@ -51,6 +57,7 @@ public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {
titreTextView = (TextView) v.findViewById(R.id.titre_annonce);
adresseTextView = (TextView) v.findViewById(R.id.adresse_annonce);
prixTextView = (TextView) v.findViewById(R.id.prix_annonce);
imageView = (ImageView) v.findViewById(R.id.image_annonce);
}
public TextView getTitreTextView() {
......@@ -62,6 +69,7 @@ public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {
public TextView getPrixTextView() {
return prixTextView;
}
public ImageView getImageView() { return imageView; }
}
/**
......@@ -97,11 +105,16 @@ public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
Log.d(TAG, "Element " + position + " set.");
//Byte array to img
InputStream is = new ByteArrayInputStream(mDataSet.get(position).getImage());
Bitmap bmpImage = BitmapFactory.decodeStream(is);
// Get element from dataset at this position and replace the contents of the view
// with that element
viewHolder.getTitreTextView().setText(mDataSet.get(position).getTitre());
viewHolder.getAdresseTextView().setText(mDataSet.get(position).getAdresse());
viewHolder.getPrixTextView().setText(String.format("%,.2f €", mDataSet.get(position).getPrix()));
viewHolder.getImageView().setImageBitmap(bmpImage);
}
// Return the size of dataset (invoked by the layout manager)
......
......@@ -163,7 +163,7 @@ public class HomeFragment extends Fragment {
*/
private void initDataset() {
DBManager dbManager = DBManager.getDBManager(this.getContext());
dbManager.open();
dbManager.open(this.getContext());
// On récupère toutes les annonces de la DB
mDataset = reverseArrayList(dbManager.getAll());
......
......@@ -25,16 +25,17 @@
android:text="Adresse, 59000 Douai" />
<ImageView
android:id="@+id/imageView"
android:id="@+id/image_annonce"
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/titre_annonce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView"
android:layout_below="@+id/image_annonce"
android:fontFamily="sans-serif-medium"
android:text="Titre annonce de test"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
......
......@@ -23,10 +23,15 @@
android:paddingBottom="8dp">
<ImageView
android:id="@+id/imageView"
android:id="@+id/image_annonce"
android:layout_width="70dp"
android:layout_height="80dp"
android:layout_height="70dp"
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp"
android:foregroundGravity="fill_horizontal|fill_vertical"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......@@ -35,11 +40,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:fontFamily="sans-serif-medium"
android:text="Titre annonce de test"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintStart_toEndOf="@+id/image_annonce"
app:layout_constraintTop_toTopOf="parent" />
<TextView
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment