#android #android-sqlite
#Android #android-sqlite
Вопрос:
Я создал базу данных для выполнения функции добавления в корзину. Это мой вспомогательный класс базы данных.
public class SQLiteHandler extends SQLiteOpenHelper {
private static final String TAG = SQLiteHandler.class.getSimpleName();
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "soulcluster";
// User table name
private static final String TABLE_USER = "user";
private static final String TABLE_PRODUCT = "product";
private static final String TABLE_ADD_TO_CART = "addtocart";
// User Table Columns names
private static final String KEY_NAME = "name";
private static final String KEY_EMAIL = "email";
private static final String KEY_PASSWORD = "password";
private static final String KEY_PRODUCT_ID = "id";
private static final String KEY_PRODUCT_IMAGE = "image";
private static final String KEY_PRODUCT_NAME = "productname";
private static final String KEY_PRODUCT_PRICE = "productprice";
private static final String KEY_PRODUCT_DESCRIPTION = "productdescription";
public SQLiteHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_USER_TABLE = "CREATE TABLE "
TABLE_USER "("
KEY_NAME " TEXT,"
KEY_EMAIL " TEXT UNIQUE,"
KEY_PASSWORD " TEXT" ")";
String CREATE_PRODUCT_TABLE = "CREATE TABLE "
TABLE_PRODUCT "("
KEY_PRODUCT_ID " TEXT PRIMARY KEY,"
KEY_EMAIL " TEXT,"
KEY_PRODUCT_IMAGE " BLOB NOT NULL,"
KEY_PRODUCT_NAME " TEXT NOT NULL,"
KEY_PRODUCT_PRICE " TEXT NOT NULL,"
KEY_PRODUCT_DESCRIPTION " TEXT NOT NULL" ")";
String CREATE_ADD_TO_CART_TABLE = "CREATE TABLE "
TABLE_ADD_TO_CART "("
KEY_PRODUCT_ID " TEXT PRIMARY KEY,"
KEY_PRODUCT_IMAGE " BLOB NOT NULL,"
KEY_PRODUCT_NAME " TEXT NOT NULL,"
KEY_PRODUCT_PRICE " TEXT NOT NULL,"
KEY_PRODUCT_DESCRIPTION " TEXT NOT NULL" ")";
db.execSQL(CREATE_USER_TABLE);
db.execSQL(CREATE_PRODUCT_TABLE);
db.execSQL(CREATE_ADD_TO_CART_TABLE);
Log.d(TAG, "Database tables created" CREATE_USER_TABLE " " CREATE_PRODUCT_TABLE " " CREATE_ADD_TO_CART_TABLE);
}
public void addToCart(String product_id, byte [] image, String productName, String productPrice, String productDescription){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_PRODUCT_ID, product_id);
contentValues.put(KEY_PRODUCT_IMAGE, image);
contentValues.put(KEY_PRODUCT_NAME, productName);
contentValues.put(KEY_PRODUCT_PRICE, productPrice);
contentValues.put(KEY_PRODUCT_DESCRIPTION, productDescription);
long id = db.insert(TABLE_ADD_TO_CART, null, contentValues);
db.close();
Log.d(TAG, "New product added into Add to cart " product_id " " image " " productName " " productPrice " " productDescription " " id);
}
public void deleteAddToCartItem(String id){
try {
SQLiteDatabase db = this.getWritableDatabase();
String query = "delete from " TABLE_ADD_TO_CART " where id='" id "'";
Log.d("", "Id is here " id);
db.execSQL(query);
db.close();
}catch (Exception e){
Log.d("", " Something is wrong");
}
}
public ArrayList<AddToCartItems> fetchProduct()
{
ArrayList<AddToCartItems> product = new ArrayList<>();
SQLiteDatabase db = this.getWritableDatabase();
String query = "select * from " TABLE_ADD_TO_CART ;
Cursor cursor = db.rawQuery(query, null);
if(cursor.moveToFirst()){
do{
AddToCartItems addToCartItems = new AddToCartItems();
addToCartItems.setId(cursor.getString(0));
addToCartItems.setImageArray(cursor.getBlob(1));
addToCartItems.setName(cursor.getString(2));
addToCartItems.setPrice(cursor.getString(3));
addToCartItems.setDescription(cursor.getString(4));
product.add(addToCartItems);
Log.d("", "check -----" cursor.getString(cursor.getColumnIndex("productname")) " " cursor.getString(cursor.getColumnIndex("id")));
cursor.moveToNext();
Log.d("", "Inside fetching method" " " cursor.getCount() " " product.size() );
System.out.print(cursor.getCount());
}while (cursor.moveToNext());
/* for (int a = 0; a < cursor.getCount(); a ){
}*/
}
Log.d("", "Checkimh product size " product.size());
db.close();
return product;
}
Я только что опубликовал требуемые методы.
В моем классе адаптера при нажатии кнопки добавить в корзину товар будет добавлен в базу данных.
holder.add_to_cart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), items.getItem_Image());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
Date d = new Date();
SimpleDateFormat sm = new SimpleDateFormat("yyyymmddhhmmss");
String productID = sm.format(d);
db.addToCart(productID, bitmapdata, items.getItem_name(), items.getItem_price(), items.getDescription());
//AppController.getInstance().addToCartItemses(items.getItem_Image(), items.getItem_name(), items.getItem_price(), items.getDescription());
Log.d(""," ShopAdapter " " " bitmapdata " " productID " " items.getItem_Image() " " items.getItem_name() " " items.getItem_price() " " items.getDescription());
}
});
вот этот метод. Я использовал изображение как кнопку, и при нажатии на это изображение срабатывает запрос вставки.
Это метод удаления в следующем классе адаптера активности
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db.deleteAddToCartItem(addToCartItemses.get(position).getId());
addToCartItemses.remove(position);
notifyDataSetChanged();
}
});
Почему мои запросы не выполняются.
Комментарии:
1. Какой метод аутентификации firebase вы используете?
2. Я использую createUserWithEmailAndPassword, а также сохраняю данные, но я не могу использовать идентификатор электронной почты в качестве идентификатора, который выдает мне ошибку.
3. Что я должен использовать для уникального идентификатора
4. Все, что вам нужно сделать, это получить предварительно назначенный uid с помощью firebase, как я упоминал в своем ответе.
Ответ №1:
Вам не нужно специально использовать что-либо для уникального идентификатора пользователя, поскольку каждому зарегистрированному пользователю присваивается уникальный идентификатор, и вы можете получить его следующим образом :
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Name, email address, and profile photo Url
String name = user.getDisplayName();
String email = user.getEmail();
Uri photoUrl = user.getPhotoUrl();
// The user's ID, unique to the Firebase project. Do NOT use this value to
// authenticate with your backend server, if you have one. Use
// FirebaseUser.getToken() instead.
String uid = user.getUid();
}
Этот фрагмент кода можно найти в официальных документах firebase здесь
Дайте мне знать, если эта информация поможет вам.
Комментарии:
1. Каждый раз происходит сбой аутентификации?
2. Используйте прослушиватель по завершении, чтобы перехватить исключение setValue из базы данных, чтобы точно определить, почему данные не сохраняются в противном случае. Если вы успешно аутентифицируете пользователя, вы можете получить уникальный идентификатор , как описано в ответе
3. Это было решено. Я забыл установить правила. Но что, если я хочу получить идентификатор конкретного пользователя при входе в систему
4. Вы имеете в виду, кроме пользователя, который вошел в систему?
5. Для того же пользователя. Если я войду в систему, мне понадобится мой uid для обновления данных