有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从sqlite数据库连接RecyclerView适配器

我试图找到一个如何使用sqlite制作recycleview的教程,但我不太了解他的步骤。有谁能帮我解决以下问题。创建sqlite的数据适配器recycleview

RecycleriveWholder。java

package com.my.app;

import 安卓.support.v7.widget.RecyclerView;
import 安卓.view.View;
import 安卓.widget.ImageView;
import 安卓.widget.TextView;

public class RecyclerViewHolder extends RecyclerView.ViewHolder {
    TextView tv1;
    ImageView imageView;

    public RecyclerViewHolder(View itemView) {
        super(itemView);
        tv1 =(TextView)itemView.findViewById(R.id.data_kategori);
        imageView=(ImageView)itemView.findViewById(R.id.list_kategori);
    }
}

回收站。爪哇

package com.my.app;

import 安卓.support.v7.widget.RecyclerView;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.TextView;

import java.util.ArrayList;


public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.myViewHolder> {
    public ArrayList<String> myValues;


    public RecycleAdapter (ArrayList<String> myValues){
        this.myValues = myValues;
    }

    @Override
    public RecycleAdapter.myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View listitem =LayoutInflater.from(parent.getContext()).inflate(R.layout.list_kategori, parent, false);
        return new myViewHolder(listitem);
    }

    @Override
    public void onBindViewHolder(RecycleAdapter.myViewHolder holder, int position) {
        holder.data_nm.setText(myValues.get(position));
    }

    @Override
    public int getItemCount() {
        return myValues.size();
    }

    public  static class  myViewHolder extends RecyclerView.ViewHolder {
        private TextView data_nm;
        public myViewHolder (View itemView) {
            super(itemView);
            data_nm =(TextView)itemView.findViewById(R.id.data_kategori);
        }
    }
}

DbHelper。java

package com.my.app;

import 安卓.content.Context;
import 安卓.database.sqlite.SQLiteDatabase;
import 安卓.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper {

        // Database Information
        static final String DB_NAME = "SavePassword";

        // database version
        static final int DB_VERSION = 1;

        // Table Name
        public static final String kategori_tb = "tb_kategori";

        // Table columns
        public static final String kategori_id = "_id";
        public static final String kategori_nm = "nm";

        // Creating table query
        private static final String data_kategori = "create table " + kategori_tb + "(" + kategori_id
                + " INTEGER PRIMARY KEY AUTOINCREMENT, " + kategori_nm + " TEXT NOT NULL);";

        public DbHelper(Context context) {
                super(context, DB_NAME, null, DB_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                db.execSQL(data_kategori);
        }

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

}


**DbManager.java**

    package com.my.app;

    import 安卓.content.ContentValues;
    import 安卓.content.Context;
    import 安卓.database.Cursor;
    import 安卓.database.SQLException;
    import 安卓.database.sqlite.SQLiteDatabase;

    public class DbManager {

        private DbHelper dbHelper;

        private Context context;

        private SQLiteDatabase database;

        public DbManager(Context c) {
            context = c;
        }

        public DbManager open() throws SQLException {
            dbHelper = new DbHelper(context);
            database = dbHelper.getWritableDatabase();
            return this;
        }

        public void close() {
            dbHelper.close();
        }

        public Cursor fetch_data() {
            String[] columns = new String[] { DbHelper.kategori_id, DbHelper.kategori_nm };
            Cursor cursor = database.query(DbHelper.kategori_tb, columns, null, null, null, null, null);
            if (cursor != null) {
                cursor.moveToFirst();
            }
            return cursor;
        }

        public void insert_data(String nm_kategori) {
            ContentValues value = new ContentValues();
            value.put(DbHelper.kategori_nm, nm_kategori);
            database.insert(DbHelper.kategori_tb, null, value);
        }
    }

主要活动。java

package com.savepassword.app;

import 安卓.content.Context;
import 安卓.content.DialogInterface;
import 安卓.content.Intent;
import 安卓.content.res.Resources;
import 安卓.os.Bundle;
import 安卓.support.design.widget.FloatingActionButton;
import 安卓.support.design.widget.NavigationView;
import 安卓.support.v4.view.GravityCompat;
import 安卓.support.v4.widget.DrawerLayout;
import 安卓.support.v7.app.ActionBarDrawerToggle;
import 安卓.support.v7.app.AlertDialog;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.support.v7.widget.AppCompatEditText;
import 安卓.support.v7.widget.DefaultItemAnimator;
import 安卓.support.v7.widget.GridLayoutManager;
import 安卓.support.v7.widget.RecyclerView;
import 安卓.support.v7.widget.Toolbar;
import 安卓.util.TypedValue;
import 安卓.view.LayoutInflater;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.Toast;

import java.util.ArrayList;

import static com.savepassword.app.R.id.nama_kategori;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener {
    RecyclerView recyclerView;

    private DbManager dbManager;
    private Button crk;
    private Context context = this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ArrayList<String> myValues = new ArrayList<>();

        //adapter = new SimpleCursorAdapter(this, R.layout.view_akun, cursor, from, to, 0);

        myValues.add("kitkat");
        myValues.add("lolipop");
        myValues.add("nougat");

        RecycleAdapter adapter = new RecycleAdapter(myValues);
        RecyclerView myView = (RecyclerView)findViewById(R.id.rc_kategori);
        myView.setHasFixedSize(true);
        myView.setAdapter(adapter);
        myView.setLayoutManager(new GridLayoutManager(this, 2));
        myView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
        myView.setItemAnimator(new DefaultItemAnimator());

    }

}    

共 (3) 个答案

  1. # 1 楼答案

    首先,需要用ArrayList填充数据库

    为此更改插入数据(字符串nm_kategori)

    public void insert_data(ArrayList<String> kategoriArray) {
        ContentValues value = new ContentValues();
    
        for(String nm_kategori : kategoriArray){
        value.put(DbHelper.kategori_nm, nm_kategori);
        database.insert(DbHelper.kategori_tb, null, value);
    
        }
    }
    

    在MainActivity上,在填充ArrayList myValues后执行此操作

    DbManager dbManager = new DbManager(this);// this for activity and getActivity()
    dbManager.open();
    dbManager.insert_data(myValues)
    dbManager.close();
    

    最后,要填充回收器视图,请执行此操作

    dbManager.open();
    ArrayList<String> populateRecycler= fetchDataFromDB() // will return Data from DB
    dbManager.close();
    RecycleAdapter adapter = new RecycleAdapter(populateRecycler);//and then populate your recycler adapter
    
  2. # 2 楼答案

    没有这样的东西可以直接使用CursorAdapterCursorRecyclerview.Adapter<>

    相反,您可以使用Cursor从sqlite获取数据,将数据填充到ArrayList中,并将其传递给Recyclerview.Adapter

    这里是另一种使用Loaders

  3. # 3 楼答案

    您已经差不多完成了,在主要活动中,只需从数据库中获取数据并将其存储在列表中即可。您已经创建了适配器,只需将该数组列表与RecyclerView绑定,就可以了

    例如

    ArrayList<String> myDataList = fetchDataFromDB() // will return Data from DB
    RecycleAdapter adapter = new RecycleAdapter(myDataList);