Как выбрать элемент из локальной базы данных в виде сетки и иметь возможность изменить этот выбранный элемент? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь выбрать элемент из локальной базы данных в виде сетки и могу изменить этот выбранный элемент:

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;
}
}

Мне не удается пройти проверку на отсутствие идентификатора, связанного с этим именем.Я думаю, что мне нужно сделать, это получить идентификатор / имя этого выбранного элемента, но я продолжаю получать объект курсора вместо этого.Это приложение предназначено для получения изображений от пользователей с помощью камеры или из их галереи и размещения их в виде сетки для отображения.Если у кого-то есть другой способ или лучший способ сделать это, я был бы более чем счастлив попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...