Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以正确的方式使用sqlite进行recyclerview_Android_Sqlite_Android Recyclerview - Fatal编程技术网

Android 以正确的方式使用sqlite进行recyclerview

Android 以正确的方式使用sqlite进行recyclerview,android,sqlite,android-recyclerview,Android,Sqlite,Android Recyclerview,嘿,伙计们,我正在研究recyclerview和sqlite如何从sqlite获取数据,然后将其展示给recyclerview。我成功了,但我不相信这是正确的方法。这是我的密码 MainActivity.java public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Toolbar mToolBar; private NavigationView mDrawer

嘿,伙计们,我正在研究recyclerview和sqlite如何从sqlite获取数据,然后将其展示给recyclerview。我成功了,但我不相信这是正确的方法。这是我的密码

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Toolbar mToolBar;
private NavigationView mDrawer;
private ActionBarDrawerToggle mdrawerToggle;
private DrawerLayout mDrawerLayout;

private Button alarmButton;
private AlarmManager alarmManager;
private PendingIntent sender;

private RecyclerView listReminder;
private RemindersAdapter adapter;

List<ListInfo> data;
ListInfo infoData;

Button addReminderBtn;

MyDBHandler dbHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_PROGRESS);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initDrawer();
    initView();


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    mdrawerToggle.onConfigurationChanged(newConfig);
}

public void initDrawer(){
    mToolBar = (Toolbar) findViewById(R.id.app_bar);
    mDrawer = (NavigationView) findViewById(R.id.main_drawer);
    setSupportActionBar(mToolBar);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mdrawerToggle = new ActionBarDrawerToggle(
            this,
            mDrawerLayout,
            mToolBar,
            R.string.drawer_open,
            R.string.drawer_close);
    mDrawerLayout.setDrawerListener(mdrawerToggle);
    // indicator based on whether the drawerlayout is in open or closed
    mdrawerToggle.syncState();
}


public void initView(){
    listReminder = (RecyclerView) findViewById(R.id.listData);

    dbHandler = new MyDBHandler(this);

    adapter = new RemindersAdapter(this, dbHandler.getAllData_a());
    listReminder.setAdapter(adapter);
    listReminder.setLayoutManager(new LinearLayoutManager(this));

    addReminderBtn = (Button) findViewById(R.id.addBtn);

    addReminderBtn.setOnClickListener(this);

}


@Override
public void onClick(View v) {

    switch (v.getId()){
        case R.id.addBtn:
            Intent addReminder = new Intent(this, AddReminderActivity.class);
            startActivity(addReminder);
            break;
    }
}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私有工具栏mToolBar;
私有导航视图mDrawer;
私有操作bardrawertoggle mdrawerToggle;
私人抽屉布局mDrawerLayout;
专用按钮报警按钮;
私人报警管理器报警管理器;
私人悬挂式发送器;
私人回收站查看列表提醒;
私有提醒适配器;
列出数据;
ListInfo信息数据;
按钮添加提醒;
MyDBHandler-dbHandler;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
requestWindowFeature(窗口功能\进度);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initDrawer();
initView();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
mdrawerToggle.onConfigurationChanged(newConfig);
}
公共发票人(){
mToolBar=(工具栏)findViewById(R.id.app\u栏);
mDrawer=(NavigationView)findViewById(R.id.main\u抽屉);
设置支持操作栏(mToolBar);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mdrawerToggle=新操作bardrawertoggle(
这
mDrawerLayout,
mToolBar,
R.string.drawer\u打开,
R.string.抽屉(U关闭);
mDrawerLayout.setDrawerListener(mdrawerToggle);
//基于抽屉布局处于打开还是关闭状态的指示器
mdrawerToggle.syncState();
}
公共视图(){
列表提醒=(RecyclerView)findViewById(R.id.listData);
dbHandler=新的MyDBHandler(此);
adapter=新的提醒适配器(这是dbHandler.getAllData_a());
setAdapter(适配器);
setLayoutManager(新的LinearLayoutManager(本));
addReminderBtn=(按钮)findViewById(R.id.addBtn);
AddRememberbtn.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.addBtn:
Intent addrementer=新的Intent(这是addrementeractivity.class);
星触觉(ADD);
打破
}
}
}

MyDBHandler.java

public class MyDBHandler extends SQLiteOpenHelper{

  private static final int DATABASE_VERSION = 6;
  private static final String DATABASE_NAME = "paroah.db";
  public static final String TABLE_REMINDER = "reminders";
  public static final  String COLUMN_ID = "_id";
  public static final  String COLUMN_TITLE_REMINDER = "title";
  public static final  String COLUMN_DESC_REMINDER = "desc";
  public static final  String COLUMN_DATE_REMINDER = "date_created";

public MyDBHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}


@Override
public void onCreate(SQLiteDatabase db) {
    String query = " CREATE TABLE "
            +TABLE_REMINDER+ "(" +
            COLUMN_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"+
            COLUMN_TITLE_REMINDER + " TEXT ,"+
            COLUMN_DESC_REMINDER + " TEXT ,"+
            COLUMN_DATE_REMINDER + " TEXT "+
            ");";

    db.execSQL(query);
}

@Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// db.execSQL("DROP TABLE IF EXIST " + TABLE_REMINDER); // onCreate(db);
    Log.d("aoi", "Upgrading database from version " + oldVersion + " to "
            + newVersion + ", which will destroy all old data");
    try {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_REMINDER);
        onCreate(db);

    } catch (SQLException e) {
        Log.d("aoi",  "getting exception "
                + e.getLocalizedMessage().toString());
    }
}

public void addReminder(ListInfo reminder ){
    ContentValues values = new ContentValues();
    values.put(COLUMN_TITLE_REMINDER, reminder.getTitle());
    values.put(COLUMN_DESC_REMINDER, reminder.getDesc());
    values.put(COLUMN_DATE_REMINDER, reminder.getDate());

    SQLiteDatabase db = getWritableDatabase();

    db.insert(TABLE_REMINDER, null, values);
    db.close();
}

public void printDatabase(){
    SQLiteDatabase db = getWritableDatabase();


}

public List<ListInfo> getAllData_a(){
    SQLiteDatabase db = getWritableDatabase();

    String query = "SELECT * FROM "+TABLE_REMINDER;

    Cursor cursor=db.rawQuery(query, null);
    List<ListInfo> data=new ArrayList<>();

    while (cursor.moveToNext()){
        int _id=cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
        String title = cursor.getString(cursor.getColumnIndex(COLUMN_TITLE_REMINDER));
        String desc  = cursor.getString(cursor.getColumnIndex(COLUMN_DESC_REMINDER));
        String date  = cursor.getString(cursor.getColumnIndex(COLUMN_DATE_REMINDER));

        ListInfo current = new ListInfo();
        current.set_id(_id);
        current.title = title;
        current.desc = desc;
        current.date = date;
        data.add(current);
    }
    return data;

}
}
公共类MyDBHandler扩展了SQLiteOpenHelper{
私有静态最终int数据库_VERSION=6;
私有静态最终字符串数据库\u NAME=“paroah.db”;
公共静态最终字符串表\u remention=“提醒”;
公共静态最终字符串列_ID=“_ID”;
公共静态最终字符串列\u TITLE\u rementer=“TITLE”;
public static final String COLUMN_DESC_rementer=“DESC”;
公共静态最终字符串列\u日期\u提醒=“日期\u已创建”;
公共MyDBHandler(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
String query=“创建表”
+表_提醒+“(”+
列ID+“整数主键自动递增,”+
列标题提醒+文本+
列描述提醒+文本+
列\日期\提醒+“文本”+
");";
execSQL(查询);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//db.execSQL(“如果存在就删除表”+表提醒);//onCreate(db);
Log.d(“aoi”,“将数据库从版本“+oldVersion+”升级到”
+新版本+”,将销毁所有旧数据);
试一试{
db.execSQL(“如果存在删除表”+表提醒);
onCreate(db);
}捕获(SQLE异常){
Log.d(“aoi”,“获取异常”
+e.getLocalizedMessage().toString());
}
}
公共作废添加提醒(列表信息提醒){
ContentValues=新的ContentValues();
value.put(列\标题\提醒,提醒.getTitle());
value.put(列描述提醒,提醒.getDesc());
value.put(列\日期\提醒,提醒.getDate());
SQLiteDatabase db=getWritableDatabase();
db.insert(表格提示,空,值);
db.close();
}
公共数据库(){
SQLiteDatabase db=getWritableDatabase();
}
公共列表getAllData_a(){
SQLiteDatabase db=getWritableDatabase();
String query=“SELECT*FROM”+表格\提醒;
Cursor Cursor=db.rawQuery(查询,空);
列表数据=新的ArrayList();
while(cursor.moveToNext()){
int_id=cursor.getInt(cursor.getColumnIndex(COLUMN_id));
String title=cursor.getString(cursor.getColumnIndex(COLUMN_title_提醒));
String desc=cursor.getString(cursor.getColumnIndex(COLUMN_desc_提醒));
String date=cursor.getString(cursor.getColumnIndex(COLUMN_date_提醒));
ListInfo当前=新建ListInfo();
当前。设置\u id(\u id);
current.title=标题;
current.desc=desc;
current.date=日期;
数据。添加(当前);
}
返回数据;
}
}
提醒适配器.java

public class RemindersAdapter extends   RecyclerView.Adapter<RemindersAdapter.ItemViewHolder> {
private final LayoutInflater inflater;
List<ListInfo> data = Collections.emptyList();

public RemindersAdapter(Context context, List<ListInfo> data){
    inflater = LayoutInflater.from(context);
    this.data = data;
}

@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.reminder_item, parent, false);

    ItemViewHolder holder = new ItemViewHolder(view);

    return holder;
}

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    ListInfo current =  data.get(position);
    holder.title.setText(current.title);
}

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

class ItemViewHolder extends RecyclerView.ViewHolder{
    TextView title;
    public ItemViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.reminderTitle);

    }
}
公共类提醒适配器扩展了RecyclerView.Adapter{ 私人充气机; List data=Collections.emptyList(); 公共提醒适配器(上下文、列表数据){ 充气机