如何将 SQLiteDatabase.execSQL 的值转换为字符串?

How to cast the value of SQLiteDatabase.execSQL to a String?

我正在使用 java 开发一个小型 android 笔记应用程序。除了我在尝试将实例 SQLiteDatabase.execSql obj 转换为字符串时遇到错误外,一切似乎都运行良好。这样做的目的是,它将允许用户更新他们的数据。在自定义适配器 class(obBind 方法)中,我设置了一个标记,这意味着即使在我的 MainActivity 中,我也有每个 itemView 的 ID。我想要它做的是,当用户向左滑动某个特定项目时,应在编辑文本中设置 his/her 数据 (editText.setText),如果 he/she 单击添加按钮,则数据应该更新了。

请参考代码以便更好地理解

自定义适配器Class:

package com.example.myapplication20;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

    Context mContext;
    Cursor mCursor;

    CustomAdapter (Context context, Cursor cursor) {
        mContext = context;
        mCursor = cursor;
    }

    @NonNull
    @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.single_item_layout, parent, false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {
        if (!mCursor.moveToPosition(position)) {
            return;
        }
        String value = mCursor.getString(mCursor.getColumnIndex(TableDetailsClass.Collection.TABLE_COLUMN));
        Long id = mCursor.getLong(mCursor.getColumnIndex(TableDetailsClass.Collection._ID));

        holder.mTextView.setText(value);
        holder.itemView.setTag(id);
    }

    @Override
    public int getItemCount() {
        return mCursor.getCount();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView mTextView;
        TextView uTextView;
        public ViewHolder(View itemView) {
            super(itemView);
            mTextView = itemView.findViewById(R.id.textView);
            uTextView = itemView.findViewById(R.id.updateTextView);
        }
    }

    public void swapCursor (Cursor newCursor) {
        if (mCursor != null) {
            mCursor.close();
        }
        mCursor = newCursor;
        if (newCursor != null) {
            notifyDataSetChanged();
        }
    }
}

主要活动Class:

package com.example.myapplication20;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.CollapsibleActionView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private EditText mEditText;
    private Button addButton;
    private RecyclerView mRecyclerView;
    private SQLiteDatabase mDataBase;
    MyOpenHelperClass myOpenHelperClass;
    CustomAdapter mCustomAdapter;

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

        myOpenHelperClass = new MyOpenHelperClass(this);
        mDataBase = myOpenHelperClass.getWritableDatabase();

        mEditText = findViewById(R.id.editText);
        addButton = findViewById(R.id.button);
        mCustomAdapter = new CustomAdapter(this, getAllItems());

        mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mCustomAdapter);

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addItems();
            }
        });

        // Swipe delete
        new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
                return false;
            }

            @Override
            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
                removeItem( (Long) viewHolder.itemView.getTag());
            }
        }).attachToRecyclerView(mRecyclerView);

        new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
                return false;
            }

            @Override
            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
                updateItem( (Long) viewHolder.itemView.getTag());
            }
        }).attachToRecyclerView(mRecyclerView);

    }
    private void addItems () {
        if (mEditText.getText().toString().trim().length() == 0) {
            return;
        }
        String textToBeAdded = mEditText.getText().toString();

        ContentValues cv = new ContentValues();
        cv.put(TableDetailsClass.Collection.TABLE_COLUMN, textToBeAdded);

        mDataBase.insert(TableDetailsClass.Collection.TABLE_NAME, null, cv);

        mCustomAdapter.swapCursor(getAllItems());

        mEditText.getText().clear();

    }

    public Cursor getAllItems () {
        return mDataBase.query(TableDetailsClass.Collection.TABLE_NAME,
                null,
                null,
                null,
                null,
                null,
                TableDetailsClass.Collection.TIMESTAMP + " DESC"
        );
    }
    public void removeItem (Long id) {
        mDataBase.delete(TableDetailsClass.Collection.TABLE_NAME,
                TableDetailsClass.Collection._ID + "=" + id, null);
        mCustomAdapter.swapCursor(getAllItems());
        Toast.makeText(this, "Item deleted!", Toast.LENGTH_SHORT).show();
    }
    public void updateItem (long id) {
        String val = mDataBase.execSQL("SELECT * FROM " + TableDetailsClass.Collection.TABLE_NAME + " WHERE " +
                TableDetailsClass.Collection._ID + "=" + id);
        mEditText.setText(val); // The line I'm getting the error in. Says cannot cast void to string.
        
        ContentValues cv = new ContentValues();
        cv.put(TableDetailsClass.Collection.TABLE_COLUMN, mEditText.getText().toString());
        mDataBase.update(TableDetailsClass.Collection.TABLE_NAME, cv,
                TableDetailsClass.Collection._ID + "=" + id, null);
        mCustomAdapter.swapCursor(getAllItems());
    }
}

SQLiteOpenHelper Class:

package com.example.myapplication20;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class MyOpenHelperClass extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "myapp.db";
    public static final int DATABASE_VERSION = 1;

    public MyOpenHelperClass(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String SQL_CREATE_QUERY = "CREATE TABLE " +
                TableDetailsClass.Collection.TABLE_NAME + "(" +
                TableDetailsClass.Collection._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                TableDetailsClass.Collection.TABLE_COLUMN + " TEXT NOT NULL, " +
                TableDetailsClass.Collection.TIMESTAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + ");";
        db.execSQL(SQL_CREATE_QUERY);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TableDetailsClass.Collection.TABLE_NAME);
        onCreate(db);
    }
}

非常感谢任何形式的帮助。

public void updateItem (long id) {
    Cursor cursor = mDataBase.rawQuery("SELECT * FROM " + TableDetailsClass.Collection.TABLE_NAME + " WHERE " +
            TableDetailsClass.Collection._ID + "= ?", new String[]{String.valueOf(id)});
    if (cursor != null && cursor.moveToFirst()) {
        String val = cursor.getString(cursor.getColumnIndex(TableDetailsClass.Collection.TABLE_COLUMN));
        mEditText.setText(val);
        cursor.close();
    }
    
    ...
}