所以我正在关注这个视频 https://www.youtube.com/watch?v=7AxlMtksJUs
我正在尝试让 Sqlite 数据显示在回收站视图中的片段中。
我已经尽力复制它,到目前为止,在我运行它之前没有错误。
任何帮助将不胜感激,我相当新,我已经检查了所有的解决方案,似乎没有工作。
这是我最后的手段。
我打开Logcat,发现以下错误:
E/SQLiteLog: (1) no such table: EnglishSongs in "SELECT song_no, song_title FROM EnglishSongs"
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.gospelsongbook, PID: 3312
android.database.sqlite.SQLiteException: no such table: EnglishSongs (code 1 SQLITE_ERROR): , while compiling: SELECT song_no, song_title FROM EnglishSongs
以下 2 个错误显示为蓝色:
at com.example.gospelsongbook.EngsongDatabaseAdapter.getAllEngsong(EngsongDatabaseAdapter.java:26)
at com.example.gospelsongbook.EnglishSongsFragment.onCreateView(EnglishSongsFragment.java:33)
这是我想在RecyclerView中显示数据的片段
EnglishSongsFragment.java:
public class EnglishSongsFragment extends Fragment {
EngsongDatabaseAdapter engsongDatabaseAdapter;
RecyclerView rvEnglish;
RecyclerView.LayoutManager layoutManager;
EngsongAdapter engsongAdapter;
List<Engsong> engsongList = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_english_songs, container, false);
DatabaseAccess.copyDB(requireActivity());
engsongDatabaseAdapter = new EngsongDatabaseAdapter(getContext());
engsongList = engsongDatabaseAdapter.getAllEngsong();
rvEnglish = (RecyclerView) view.findViewById(R.id.rvEnglish);
rvEnglish.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
rvEnglish.setLayoutManager(layoutManager);
engsongAdapter = new EngsongAdapter(getContext(), engsongList, rvEnglish);
rvEnglish.setAdapter(engsongAdapter);
return view;
}
}
构造函数和Getter
Engsong.java
public class Engsong {
private final long song_no;
private final String song_title;
public Engsong(long song_no, String song_title)
{
this.song_no = song_no;
this.song_title = song_title;
}
public long getSong_no() {
return song_no;
}
public String getSong_title() {
return song_title;
}
RecyclerView适配器
EngsongAdapter.java:
public class EngsongAdapter extends RecyclerView.Adapter<EngsongAdapter.ViewHolder> {
Context context;
List<Engsong> engsongList;
RecyclerView rvEnglish;
final View.OnClickListener onClickListener = new EngOnClickListener();
public static class ViewHolder extends RecyclerView.ViewHolder
{
TextView rowEngsongno;
TextView rowEngsongtitle;
public ViewHolder(@NonNull View itemView) {
super(itemView);
rowEngsongno = itemView.findViewById(R.id.eng_song_no);
rowEngsongtitle = itemView.findViewById(R.id.eng_song_title);
}
}
public EngsongAdapter (Context context, List<Engsong> engsongList, RecyclerView rvEnglish)
{
this.context = context;
this.engsongList = engsongList;
this.rvEnglish = rvEnglish;
}
@NonNull
@Override
public EngsongAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.single_item, parent, false);
view.setOnClickListener(onClickListener);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull EngsongAdapter.ViewHolder holder, int position) {
Engsong engsong = engsongList.get(position);
holder.rowEngsongno.setText(""+engsong.getSong_no());
holder.rowEngsongtitle.setText(engsong.getSong_title());
}
@Override
public int getItemCount() {
return engsongList.size();
}
private class EngOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
int itemPosition = rvEnglish.getChildLayoutPosition(view);
String item = engsongList.get(itemPosition).getSong_title();
Toast.makeText(context, item, Toast.LENGTH_SHORT).show();
}
}
}
数据库适配器
EngsongDatabaseAdapter.java:
public class EngsongDatabaseAdapter {
DatabaseHelper helper;
SQLiteDatabase db;
List<Engsong> engsongList = new ArrayList<>();
public EngsongDatabaseAdapter(Context context)
{
helper = new DatabaseHelper(context);
db = helper.getWritableDatabase();
}
public List<Engsong> getAllEngsong()
{
String[] columns = {DatabaseHelper.KEY_ROWENGSONGNO, DatabaseHelper.KEY_ENGSONGTITLE};
Cursor cursor = db.query(DatabaseHelper.TABLE_NAME, columns, null,null,null,null, null, null);
while(cursor.moveToNext())
{
int index1 = cursor.getColumnIndex(DatabaseHelper.KEY_ROWENGSONGNO);
int rowsongno = cursor.getInt(index1);
int index2 = cursor.getColumnIndex(DatabaseHelper.KEY_ENGSONGTITLE);
String songtitle = cursor.getString(index2);
Engsong engsong = new Engsong(rowsongno, songtitle);
engsongList.add(engsong);
}
cursor.close();
return engsongList;
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
private static final String DATABASE_NAME = "GospelSongBookData.db";
private static final String TABLE_NAME = "EnglishSongs";
private static final int DATABASE_VERSION = 5;
private static final String KEY_ROWENGSONGNO = "song_no";
private static final String KEY_ENGSONGTITLE = "song_title";
private final Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
}
数据库访问:
public class DatabaseAccess {
public static void copyDB(Context context)
{
try
{
String destPath = "/data/data/"+ context.getPackageName()
+ "/databases";
File f = new File(destPath);
if(!f.exists()){
f.mkdir();
// Copy the db from assets folder into the databases folder
rawCopy(context.getAssets().open("GospelSongBookData.db"), new FileOutputStream(destPath + "/GospelSongBookData.db"));
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void rawCopy(InputStream inputStream, OutputStream outputStream) throws IOException
{
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0)
{
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}
}
检查你的数据库助手你错过了CREATE_TABLE函数
请注意,根据数据库结构更改密钥。
private static class DatabaseHelper extends SQLiteOpenHelper {
private static final String CREATE_TABLE = "create table "+ TABLE_NAME+
" ("+ KEY_ROWID+" integer primary key autoincrement, "+ KEY_NAME + " text, "+ KEY_EMAIL+ " text)";
private static final String DROP_TABLE = "drop table if exists "+ TABLE_NAME;
private Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
Toast.makeText(context, "constructor called", Toast.LENGTH_SHORT).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
try{
//db.execSQL(CREATE_TABLE);
Toast.makeText(context, "onCreate called", Toast.LENGTH_SHORT).show();
}catch (SQLException e){
Toast.makeText(context, ""+e, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try{
Toast.makeText(context, "onUpgrade called", Toast.LENGTH_SHORT).show();
//db.execSQL(DROP_TABLE);
//onCreate(db);
}catch (SQLException e){
Toast.makeText(context, ""+e, Toast.LENGTH_SHORT).show();
}
}
}
}
问题内容: 我正在尝试使用Docker使用此存储库为AWS Lambda创建一个依赖包,但是每当我尝试运行build.sh文件时,都会收到以下消息: 没有这样的选择:–use-wheel 然后,当我尝试使用(在Docker之外)时,我被告知它已经在我的本地计算机上了。 如何在Docker容器中安装Wheel? 如果有帮助,这似乎是build.sh中出现问题的代码行: 任何帮助深表感谢! 问题答案:
关于StackOverflow有一些关于如何处理期货列表的建议,但我想尝试我自己的方法。但是我无法编译以下代码 我有一份未来的清单。我想数一数他们中有多少人及格或不及格。我应该得到(2,1),我将其存储在一个元组中。我想采取的方法是遍历列表中的每个元素。列表的元素是Future[Int]。对于每个元素,我调用flatMap,它调用下一个递归循环(我假设如果调用flatMap,那么特定的未来将是成功
问题内容: 我正在使用Django-CMS的Django项目中构建一个相当简单的应用程序,即研究项目。(这是我对项目/应用程序的首次尝试。)它的主要目的是存储各种知识资产(例如,研究人员撰写的文章,书籍等)。 问题是,当我将浏览器指向/ research /时,出现一条错误,提示表’research_journal’不存在(“ no such table”)。 我正在使用带有sqlite3数据库的
问题内容: 我遵循的是官方Django文档中的第一个应用程序教程,尝试保存通过管理页面进行的某些更改时出现此错误。我对此进行了一些研究,但是我能够找到的可能解决方案(例如迁移数据库)根本行不通。如果您想查看我的代码的某些特定部分,请告诉我。 以下是错误: and the traceback: 问题答案: 我自己碰到了这个问题,它似乎与https://code.djangoproject.com/t
我试图编译JDK 12()在我自己的MacBook Pro 2019中使用英特尔芯片(macOS Monterey 12.3.1)。第一步我运行configure命令: 输出如下所示: 没有错误输出。使用以下命令生成项目时: 显示如下错误: 我也试过: 我该怎么解决这个问题?
在Windows下,可执行程序(Executable Program)大部分是 .exe 程序,它是一系列计算机指令和数据的集合。这些指令都是二进制形式的,CPU可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。 计算机发展初期,程序员就是使用这些二进制形式的CPU指令来编写程序的。 直接使用CPU指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁