如何将列表视图数据传递到SQLite数据库?

SrZues

我正在构建消息应用程序,消息和编号显示在列表视图中,但是我不确定如何将列表视图数据传递到SQLite数据库?这是我的列表视图代码,但不确定如何将数据传递到数据库。

package com.example.sunny.messager;

import java.util.ArrayList;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class ListActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        ListView lv=(ListView)findViewById(R.id.SmsList);

        if(fetchInbox()!=null){
            ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,fetchInbox());
            lv.setAdapter(adapter);
        }

    }
    public ArrayList<String> fetchInbox(){

        ArrayList<String> sms=new ArrayList<String>();

        Uri uriSms=Uri.parse("content://sms/");

        Cursor cursor=getContentResolver().query(uriSms, new String[]{"_id","address","date","body"}, null, null, null);
        cursor.moveToFirst();
        while(cursor.moveToNext()){

            String address=cursor.getString(1);
            String body=cursor.getString(3);

            sms.add("Number: " +address+"\n Message: " +body);
        }
        return sms;
    }
}
妇幼保健院

您需要使用这些类SQLiteDatabase和SQLiteOpenHelper。

  • SQLiteDatabase是我们执行CRUD功能的类。
  • SQLiteOpenHelper是用于管理数据库创建和版本管理的助手类。

现在,让我们首先在表结构部分开始代码–在Android中创建表。我们将创建一个文件名SMSData.java,该文件中的代码如下所示

package com.example.sqlitedb;
public class SMSData {
    // Labels table name
    public static final String TABLE = "SMSData";

    // Labels Table Columns names
    public static final String KEY_ID = "id";
    public static final String KEY_number = "number";
    public static final String KEY_message= "message";

    // property help us to keep data
    public int SMSData_ID;
    public int number;
    public String message;
}

我们将创建一个类并将其命名为DBHelper.java,此文件中的代码将如下所示,以简化我逐行注释代码的过程。

package com.example.sqlitedb;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper  extends SQLiteOpenHelper {
    //version number to upgrade database version
    //each time if you Add, Edit table, you need to change the
    //version number.
    private static final int DATABASE_VERSION = 4;

    // Database Name
    private static final String DATABASE_NAME = "crud.db";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        //All necessary tables you like to create will create here

        String CREATE_TABLE_SMSDATA= "CREATE TABLE " + SMSData.TABLE  + "("
                + SMSData.KEY_ID  + " INTEGER PRIMARY KEY AUTOINCREMENT ,"
                + SMSData.KEY_number+ " INTEGER, "
                + SMSData.KEY_message+ " TEXT )";

        db.execSQL(CREATE_TABLE_SMSDATA);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed, all data will be gone!!!
        db.execSQL("DROP TABLE IF EXISTS " + SMSData.TABLE);

        // Create tables again
        onCreate(db);

    } 

}

通过以上两个步骤,将在应用程序启动时创建SMSData表,现在我们可以编写CRUD函数了!创建SMSDataRepo.java,此类的目的是对SMSData表执行CRUD。该文件中的代码将如下所示。

package com.example.sqlitedb;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.HashMap;

public class SMSDataRepo {
    private DBHelper dbHelper;

    public SMSDataRepo(Context context) {
        dbHelper = new DBHelper(context);
    }

    public int insert(SMSData sMSData) {

        //Open connection to write data
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(SMSData.KEY_number, sMSData.number);
        values.put(SMSData.KEY_message,sMSData.message);

        // Inserting Row
        long SMSData_Id = db.insert(SMSData.TABLE, null, values);
        db.close(); // Closing database connection
        return (int) SMSData_Id;
    }

    public void delete(int SMSData_Id) {

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        // It's a good practice to use parameter ?, instead of concatenate string
        db.delete(SMSData.TABLE, SMSData.KEY_ID + "= ?", new String[] { String.valueOf(SMSData_Id) });
        db.close(); // Closing database connection
    }

    public void update(SMSData sMSData) {

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(SMSData.KEY_number, sMSData.number);
        values.put(SMSData.KEY_message,sMSData.message);

        // It's a good practice to use parameter ?, instead of concatenate string
        db.update(SMSData.TABLE, values, SMSData.KEY_ID + "= ?", new String[] { String.valueOf(SMSData.SMSData_ID) });
        db.close(); // Closing database connection
    }

    public ArrayList<HashMap<String, String>>  getSMSDataList() {
        //Open connection to read only
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        String selectQuery =  "SELECT  " +
                SMSData.KEY_ID + "," +
                SMSData.KEY_number+                     
                SMSData.KEY_message+ "," +
                " FROM " + SMSData.TABLE;

        //SMSData sMSData= new SMSData();
        ArrayList<HashMap<String, String>> sMSDataList = new ArrayList<HashMap<String, String>>();

        Cursor cursor = db.rawQuery(selectQuery, null);
        // looping through all rows and adding to list

        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> sMSData= new HashMap<String, String>();
                sMSData.put("number", cursor.getString(cursor.getColumnIndex(SMSData.KEY_number)));
                sMSData.put("message", cursor.getString(cursor.getColumnIndex(SMSData.KEY_message)));
                sMSDataList.add(sMSData);

            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();
        return sMSDataList;

    }

    public SMSData getSMSDataById(int Id){
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        String selectQuery =  "SELECT  " +
                SMSData.KEY_ID + "," +
                SMSData.KEY_number + "," +
                SMSData.KEY_message +
                " FROM " + SMSData.TABLE
                + " WHERE " +
                SMSData.KEY_ID + "=?";// It's a good practice to use parameter ?, instead of concatenate string

        int iCount =0;
        SMSData sMSData= new SMSData();

        Cursor cursor = db.rawQuery(selectQuery, new String[] { String.valueOf(Id) } );

        if (cursor.moveToFirst()) {
            do {
                sMSData.SMSData_ID =cursor.getInt(cursor.getColumnIndex(SMSData.KEY_ID));
                sMSData.number=cursor.getInt(cursor.getColumnIndex(SMSData.KEY_number));
                sMSData.message=cursor.getString(cursor.getColumnIndex(SMSData.KEY_message));

            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();
        return sMSData;
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将堆栈视图中的 qml 文件中的数据传递到数据库中的表

我如何将数据传递到我的SQLite数据库中

UWP。如何将数据传递到数据库然后填充网格?

如何将 SQLite 数据库数据传递给活动并为该数据增加价值?

如何获得2个单选按钮列表,这些列表将数据传递到mysql数据库?春季靴

如何将重试的数据库数据传递到另一个页面?

使用PHP将数据传递到数据库

如何将数据从控制器传递到数据库以获取列表

如何将DataGridView绑定到SQLite数据库?

如何将多维列表插入sqlite数据库

如何将表单数据传递到控制器,然后将其存储到数据库?拉拉韦尔

Laravel Mail ::发送如何将数据传递到邮件视图

如何将数据传递到ASP MVC中的共享视图?

如何将发布请求数据传递到单独的视图?(Django)

如何将 Future 数据传递给视图?

如何将表单数据传递到多个sqlite3行

将数据从SQLite数据库显示到自定义列表视图

如何将数据传递到选定的场景

如何将数据传递到类之外的组件

如何将数据传递到fancybox函数?

如何将数据传递到嵌套布局

如何将数据传递到SectionList?

如何将数据传递到ReactJS中的表单?

如何将数据传递到导航抽屉项?

如何将数据传递到Vue

如何将Json数据传递到JavaScript数组?

如何将iframe数据传递到父窗口

我如何将数据传递到对象数组

如何将数据传递到Angular路由组件?