如何将 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();
}
...
}
我正在使用 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();
}
...
}