Я разрабатываю приложение sms. Когда sms получен, он сохраняется в sqlite db и отображается в списке как элемент listview. Теперь проблема заключается в том, что «если 4 сообщения получены от номера, он говорит« 090071222 », а затем каждый раз, когда sms сохраняется в базе данных, и он отображается как 4 отдельных элемента в списке. Я хочу сделать только один элемент, похожий на текстовые сообщения. Другим способом я хочу сохранить все эти 4 элемента в базе данных, но хочу показать только последние sms, полученные от этого числа в списке. В списке отображаются только последние sms из 4 сообщений, и когда я нажимаю в элементе списка затем должно отображаться 4 сообщения внутри него.Показать элементы списка в группе по заказу
Кто-то ответил мне, что я могу использовать запрос Group By, чтобы показывать только один смс с одного номера телефона в моем основном списке, но я немного смущен тем, что где поставьте этот запрос. Это мой класс, в котором я создаю таблицу для получения смс.
public class DBtableforNotSpam extends SQLiteOpenHelper {
public DBtableforNotSpam(Context context) {
super(context, "dbnotspam.db", null,
1);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(Constants.query_createSMSTablee);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Constants.query_createSMSTablee определяется здесь:
public static final String query_createSMSTablee = "create table " + "smss" + "(" + "id" + " integer primary key autoincrement, "
+ "contactnumber" + " text, " + "contactname" + " text," + "message" + " text," + "date" + " text)";
Когда любой смс получил я спасаю его здесь, в этом методе:
screenMessagee(context, msg_from, msg_from, msgBody, msgDate);
Этот метод определяется здесь:
public void screenMessagee(Context context, String msg_from, String msgSender,
String msgBody, String msgDate) {
DBtableforNotSpam smsdb = new DBtableforNotSpam(context);
SQLiteDatabase dbw = smsdb.getWritableDatabase();
String query_insertSMS = "insert into " + "smss" + "(" + "contactnumber" + "," + "contactname" + "," + "message"
+ "," + "date" + ") values (\"" + msg_from.toString() + "\", \"" + msgSender + "\",\"" + msgBody
+ "\",\"" + msgDate + "\")";
dbw.execSQL(query_insertSMS);
smsdb.close();
dbw.close();
abortBroadcast();
}
Когда вы выбираете записи в моем основном списке, я делаю это:
public ArrayList<Sms> fetchScreenedSms() {
ArrayList<Sms> smsInbox = new ArrayList<Sms>();
String query_fetchSMS = "select * from " + "smss" + ";";
DBtableforNotSpam smsD = new DBtableforNotSpam(this);
SQLiteDatabase dbw = smsD.getWritableDatabase();
Cursor cursor = dbw.rawQuery(query_fetchSMS, null);
if (cursor != null) {
cursor.moveToLast();
if (cursor.getCount() > 0) {
do {
Sms message = new Sms();
message.id = cursor.getInt(cursor
.getColumnIndex("id"));
message.messageNumber = cursor.getString(cursor
.getColumnIndex("contactnumber"));
message.messageSender = cursor.getString(cursor
.getColumnIndex("contactname"));
message.messageContent = cursor.getString(cursor
.getColumnIndex("message"));
message.setDate(cursor.getString(cursor
.getColumnIndex("date")));
smsInbox.add(message);
} while (cursor.moveToPrevious());
} else {
empty.setVisibility(View.VISIBLE);
}
Скажите, пожалуйста, где поставить запрос GROU BY phonenumber так, чтобы в моем основном списке отображалось только одно смс-шоу на номер телефона. Я попытался написать GROUP BY в методе fetchScreenSms, но ничего не отображается в моем списке, если используется GROUP BY Query. Может быть, потому что у меня нет отдельной колонки для номера звонков. Пожалуйста, помогите
Вы должны использовать развернутое представление списка. И правильный синтаксис запроса принадлежит вашему предыдущему вопросу. –
любая небольшая помощь по коду? –