使用基本适配器和列表视图显示来自 SQLite 的变量数据

Posted

技术标签:

【中文标题】使用基本适配器和列表视图显示来自 SQLite 的变量数据【英文标题】:Display variable data from SQLite using base adapter and listview 【发布时间】:2015-12-01 02:53:24 【问题描述】:

您好,我正在开发的应用程序包含来自解析的 json 通知,应用程序将其存储在 SQLite 中在我的代码的主要活动中显示它

public class Receiver extends ParsePushBroadcastReceiver 


 @Override
    public void onPushReceive(Context context, Intent intent) 
        super.onPushReceive(context, intent);
        Log.e("Push", "Clicked");
        Intent i = new Intent(context, splashscreen.class);
        i.putExtras(intent.getExtras());
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i); 
        
        
        Log.d("Alert: ", "Inserting from onReceive"); 
        Bundle extras = intent.getExtras();
        String jsonData = extras.getString("com.parse.Data");
        JSONObject jsonObject;
        try 
            jsonObject = new JSONObject(jsonData);
            String alert = jsonObject.getString("alert");
            Log.d("Insert: ",alert); 
            String Message = jsonObject.getString("Message");
            Log.d("Title: ",Message); 
            String Date = jsonObject.getString("Date");
            Log.d("Date: ",Date); 
             
        
            DatabaseHandler db=new DatabaseHandler(context);
          
            db.addnotification(new notification(alert,Message,Date));
            
            Log.d("Reading: ", "Reading all notifications.."); 
            List<notification> notifications = db.getAllnotifications();       
             
            for (notification cn : notifications) 
                String log = "Id: "+cn.getID()+" ,Title: " + cn.gettitle() + " ,Message: " + cn.getmessage()+ " ,Date: " + cn.gettimedate();
                // Writing notifications to log
                Log.d("Name: ", log);
            
         catch (JSONException e) 
            e.printStackTrace();
        

【问题讨论】:

您能否正确地提供一些关于您想要实现的目标的见解?您面临的任何错误和问题都可以帮助社区了解您实际遇到的问题 我想在列表视图中显示存储在sqlite中的json数据(其中“警报”“消息”“日期”) @F***o Francesconi 你可以从数据库中取回来,然后显示出来。你在寻找什么问题? 如何找回它...@Diyoda 【参考方案1】:

进行中,,,

    编写您的 Dao 类(在您的情况下为 DatabaseHandler 类)以从数据库中获取数据(或者您可以编写一个内容提供程序 - 实现此目的的好方法。)

一个示例dao类如下,

public class DocumentRepository 

            public static final String TABLE_DOCUMENT = "document";
            public static final String COLUMN_ID = BaseColumns._ID;
            public static final String RECORD_ID = "record_id";
            public static final String UUID_DOCUMENT_NAME = "unique_file_name";

            public static final String DOCUMENT_TABLE_CREATE = "create table if not exists "
                    + TABLE_DOCUMENT + "(" + COLUMN_ID
                    + " integer primary key autoincrement, " + RECORD_ID
                    + " integer , " + UUID_DOCUMENT_NAME
                    + " text );";
            private Context context;

            public DocumentRepository(Context context) 
                this.context = context;
            


            public ArrayList<Document> geDocuments(Integer customerId) 
                ArrayList<Document> documents = new ArrayList<>();
                String query = "SELECT * FROM " + TABLE_DOCUMENT + " WHERE " + RECORD_ID + " = '" + customerId + "'";
                SQLiteDatabase database = ......// create a instance of your SqliteDatabase implementation 
                Cursor cursor = database.rawQuery(query, null);

                if (cursor.moveToFirst()) 
                    do 
                        Document document = new Document();
                        document.setId(cursor.getInt(0));
                        document.setUniqueIdentifier(cursor.getString(3));
                        documents.add(document);
                     while (cursor.moveToNext());
                
                return documents;
            
        
    获取要在 ListView 中显示的对象列表。

在此示例中,geDocuments() 将为您提供对象列表。

    将其注入您的 Adapter 并为 listView 引用设置 Adapter。

【讨论】:

【参考方案2】:

公共类 DatabaseHandler 扩展 SQLiteOpenHelper

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "notificationsbase";

// notifications table name
private static final String TABLE_notifications = "notifications";

// notifications Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_title = "title";
private static final String KEY_message = "message";
private static final String KEY_timedate = "timedate";

public DatabaseHandler(Context context) 

    super(context, DATABASE_NAME, null, DATABASE_VERSION);


// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) 
    String CREATE_notificationS_TABLE = "CREATE TABLE " + TABLE_notifications + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_title + " TEXT,"
            + KEY_message + " TEXT ,"  + KEY_timedate + " NUMERIC " + ")";
    db.execSQL(CREATE_notificationS_TABLE);


// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_notifications);

    // Create tables again
    onCreate(db);


/**
 * All CRUD(Create, Read, Update, Delete) Operations
 */

// Adding new notification
void addnotification(notification notification) 

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_title, notification.gettitle());            // title
    values.put(KEY_message, notification.getmessage());       // message
    values.put(KEY_timedate, notification.gettimedate());    // timedate

    // Inserting Row
    db.insert(TABLE_notifications, null, values);
    db.close(); // Closing database connection


// Getting single notification
notification getContact(int id) 
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_notifications, new String[]  KEY_ID,
            KEY_title, KEY_message, KEY_timedate , KEY_ID + "=?",
            new String[]  String.valueOf(id) , null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    notification notifications = new notification(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2), cursor.getString(3));
    // return contact
    return notifications;


// Getting All notifications
public List<notification> getAllnotifications() 
    List<notification> notificationList = new ArrayList<notification>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_notifications;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) 
        do 
            notification notification = new notification();
            notification.setID(Integer.parseInt(cursor.getString(0)));
            notification.settitle(cursor.getString(1));
            notification.setmessage(cursor.getString(2));
            notification.settimedate(cursor.getString(3));
            // Adding notification to list
            notificationList.add(notification);
         while (cursor.moveToNext());
    

    // return notification list
    return notificationList;


// Updating single notification
public int updatenotification(notification notification) 
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_title, notification.gettitle());
    values.put(KEY_message, notification.getmessage());
    values.put(KEY_timedate, notification.gettimedate());


    // updating row
    return db.update(TABLE_notifications, values, KEY_ID + " = ?",
            new String[]  String.valueOf(notification.getID()) );


// Deleting single notification
public void deletenotification(notification notification) 
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_notifications, KEY_ID + " = ?",
            new String[]  String.valueOf(notification.getID()) );
    db.close();



// Getting notifications Count
public int getnotificationsCount() 
    String countQuery = "SELECT  * FROM " + TABLE_notifications;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();


public void open() 
    // TODO Auto-generated method stub


【讨论】:

【参考方案3】:
public class notification 

//private variables
int id;
String title;
String message;
String timedate;


// Empty constructor
public notification()


// constructor
public notification(int id, String title, String message, String timedate)
    this.id = id;
    this.title = title;
    this.message = message;
    this.timedate = timedate;




// constructor
public notification(String title, String message, String timedate)
    this.title = title;
    this.message = message;
    this.timedate = timedate;


// getting ID
public int getID()
    return this.id;


// setting id
public void setID(int id)
    this.id = id;


// getting title
public String gettitle()
    return this.title;


// setting title
public void settitle(String title)
    this.title = title;


// getting message
public String getmessage()
    return this.message;


// setting message
public void setmessage(String message)
    this.message = message;


// getting timedate
public String gettimedate()
    return this.timedate;


// setting message
public void settimedate(String timedate)
    this.timedate = timedate;

【讨论】:

以上是关于使用基本适配器和列表视图显示来自 SQLite 的变量数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时生成卡片视图以显示来自 Sqlite 的数据?

如何将最新数据附加到android中的自定义基本适配器列表视图?

使用 SQLite 数据库错误填充可扩展列表视图

如何将自定义适配器添加到活动中以使列表出现在活动中?

如何使用来自另一个活动的自定义适配器更新列表视图?

列表视图适配器实现