如何将数据存储到外部sqlite数据库并在RecyclerView中显示

时间:2019-03-02 03:42:34

标签: android android-recyclerview android-sqlite sqliteopenhelper

我创建了一个外部sqlite数据库,其中存储了图书信息。其存储在资产文件夹中。我已经创建了一个book对象,但是现在我不确定如何在其中存储数据库中的值。我已经使用列表函数使用sqliteaccesshelper库从数据库中检索值,并在主活动中将其调用。如果有人建议我如何将值存储在我的book对象中,那将真的有帮助。 This是我遵循的教程。

我的书本对象是具有四个参数的book()。

public book(String title, String author, byte[] image, String issue) {
        Title = title;
        Author = author;
        Image = image;
        Issue = issue;

    }

这是数据库功能。请注意,它不合适,我不确定如何将其值存储在Book对象中。

public List<String> getdetails() {
        List<String> lstBook = new ArrayList<>();
        Cursor cursor = database.rawQuery("SELECT Book_name, Author, Book_cover, Issue_status FROM books", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
//This line is showing an error.
            lstBook.add(cursor.getString(cursor.getColumnIndex("Book_name")), cursor.getString(cursor.getColumnIndex("Author")), cursor.getBlob(cursor.getColumnIndex("Book_cover")), cursor.getString(cursor.getColumnIndex("Issue_Status")));

            book Book = new book(); //this is the book object
            Book.setTitle(cursor.getString(0));
            Book.setAuthor(cursor.getString(1));
            Book.setImage(cursor.getBlob(2));
            Book.setIssue(cursor.getString(3));
            cursor.moveToNext();
        }
        cursor.close();
        return lstBook; 
    }

这是我的MainActivity

// Open the database
        databaseAccess.open();

        List<String> lstBook = databaseAccess.getdetails();



        RecyclerView myrv = (RecyclerView) findViewById(R.id.recyclerview_id);
        RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this, lstBook);
        myrv.setLayoutManager(new GridLayoutManager(this, 2));
        myrv.setAdapter(myAdapter;

        // Close the database
        databaseAccess.close();
    }

这是我的RecyclerView适配器。(虽然我不确定所设置的图像部分)

@Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        holder.bookname.setText(mData.get(position).getTitle());
        holder.bookauthor.setText(mData.get(position).getAuthor());
        byte[] data = mData.get(position).getImage(); Bitmap image = toBitmap(data);
        holder.bookimg.setImageBitmap(image);
        holder.issuestatus.setText(mData.get(position).getIssue());

    }

2 个答案:

答案 0 :(得分:0)

您可以尝试使用第三方驱动程序,几年前,我通过以下一种方式与MSSQL连接:

http://www.sqlitetutorial.net/sqlite-java/sqlite-jdbc-driver/

https://bitbucket.org/xerial/sqlite-jdbc/src/default/

您可以尝试这些,或搜索其他人。

对于存储在资产中的sqlite db,我没有使用任何这些方法,您可以尝试一下。

希望有帮助。

答案 1 :(得分:-2)

我发现了它,并且效果很好。 This个视频帮助了我。我只是按照他的方法将书添加到列表中。 我在DatabaseAccess类中创建了一个函数,并在Required Activity中对其进行了访问。这是功能。

public ArrayList<book> getdetails(String query, String category) {
        ArrayList<book> list = new ArrayList<book>();
        String[] where= new String[]{category};
        Cursor cursor = database.rawQuery(query, where);
        if (cursor!=null) {
            if (cursor.moveToFirst()) {
                do {
                    book Book = new book();
                    Book.setTitle(cursor.getString(1));
                    Book.setAuthor(cursor.getString(6));
                    Book.setImage(cursor.getBlob(2));
                    Book.setPublisher(cursor.getString(3));
                    Book.setPublish_date(cursor.getString(4));
                    Book.setISBN(cursor.getString(5));
                    Book.setDescription(cursor.getString(9));
                    Book.setIssue(cursor.getString(10));
                    list.add(Book);
                }while (cursor.moveToNext());
            }
        }cursor.close();
        return list;
    }