Я пытаюсь выбрать элемент из локальной базы данных в виде сетки и могу изменить этот выбранный элемент:
DatabaseFragment.java
public class DatabaseFragment extends Fragment {
private static final String TAG = "tag";
private MemoryDbHelper dbHelper;
private GridView gridView;
FloatingActionButton fab;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_database, container, false);
this.gridView = view.findViewById(R.id.activity_main_grid_view);
this.dbHelper = new MemoryDbHelper(getActivity());
this.gridView.setAdapter(new MemoriesAdapter(getActivity(), this.dbHelper.readAllMemories(), false));
this.gridView.setEmptyView(view.findViewById(R.id.activity_main_empty_view));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String title = gridView.getItemAtPosition(position).toString();
Log.d(TAG, "onItemClick: " + title);
Toast.makeText(getActivity().getApplicationContext(),
"Item Clicked: " + position, Toast.LENGTH_SHORT).show();
Cursor data = dbHelper.getItemID(title);
int itemID = -1;
while(data.moveToNext()){
itemID = data.getInt(0);
}
if(itemID > -1){
Intent editScreenIntent = new Intent(getActivity().getApplicationContext(), EditDataActivity.class);
editScreenIntent.putExtra("id",itemID);
editScreenIntent.putExtra("title",title);
startActivity(editScreenIntent);
}
else{
toastMessage("No ID associated with that name");
}
}
});
fab = view.findViewById(R.id.myFAB);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent in = new Intent(getActivity(), NewMemoryActivity.class);
startActivity(in);
}
});
return view;
}
@Override
public void onResume() {
super.onResume();
((CursorAdapter)gridView.getAdapter()).swapCursor(this.dbHelper.readAllMemories());
}
private void toastMessage(String message){
Toast.makeText(getActivity().getApplicationContext(),message, Toast.LENGTH_SHORT).show();
}
}
MemoryDBHelper.java
package com.example.sign_app.Database;
public class MemoryDbHelper extends SQLiteOpenHelper {
private static final String TEXT_TYPE = " TEXT";
private static final String INTEGER_TYPE = " INTEGER";
private static final String COMMA_SEP = ",";
private static final String DATABASE_NAME = "User Database";
private static final int DATABASE_VERSION = 1;
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + TABLE_NAME + " (" +
MemoryContract.MemoryEntry._ID + INTEGER_TYPE + " PRIMARY KEY AUTOINCREMENT " + COMMA_SEP +
MemoryContract.MemoryEntry.COLUMN_TITLE + TEXT_TYPE + COMMA_SEP +
MemoryContract.MemoryEntry.COLUMN_IMAGE + TEXT_TYPE + " )";
public MemoryDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
//This method has been intentionally left empty. There is only one version of the database.
}
public Cursor readAllMemories() {
SQLiteDatabase db = getReadableDatabase();
return db.query(
TABLE_NAME,
null,
null,
null,
null,
null,
null
);
}
public boolean addMemory(Memory memory) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MemoryContract.MemoryEntry._ID, memory.getID());
values.put(MemoryContract.MemoryEntry.COLUMN_TITLE, memory.getTitle());
values.put(MemoryContract.MemoryEntry.COLUMN_IMAGE, memory.getImageAsString());
return db.insert(TABLE_NAME, null, values) != -1;
}
public Cursor getItemID(String title){
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT " + _ID + " FROM " + TABLE_NAME + " WHERE " + _ID + " = '" + title + "'";;
Cursor data = db.rawQuery(query, null);
return data;
}
}
Мне не удается пройти проверку на отсутствие идентификатора, связанного с этим именем.Я думаю, что мне нужно сделать, это получить идентификатор / имя этого выбранного элемента, но я продолжаю получать объект курсора вместо этого.Это приложение предназначено для получения изображений от пользователей с помощью камеры или из их галереи и размещения их в виде сетки для отображения.Если у кого-то есть другой способ или лучший способ сделать это, я был бы более чем счастлив попробовать.