按查询分组在列表视图android中显示一些意外结果

我有一个列表视图,其中显示了从联系人号码收到的消息.现在的问题是,如果我收到来自“ 1234567”的5条消息和来自“ 56789”的3条消息,那么我的主列表视图显示了8条消息,尽管我只想在我的主要lisvtiew中通过这两个数字显示1条消息,类似于sms应用程序作为线程并在项目上单击,将显示该特定编号的剩余消息.
有人回答我使用按电话号码分组查询来按电话号码查询结果.
当收到任何短信时,我将其保存在名为“ smss”的表中.
这是我从数据库中获取数据时的代码:

public ArrayList<Sms> fetchScreenedSms() {
  Sms a = new Sms();
ArrayList<Sms> smsInbox = new ArrayList<Sms>();
String query_fetchSMS = "select * from " + "smss" +  " group by " + "contactnumber" + "\"" ;
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);
    }

这是我在数据库中保存短信的代码:

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();

  }

现在我在某人建议的fetchScreenSms方法中应用了按组查询,但是如果应用了此方法,则listview没有显示任何内容,即它为空的listview数据:

String query_fetchSMS = "select * from " + "smss" +  " group by " + "contactnumber" + " = \"" + "\"" ;

这是某人建议的,但在列表视图中什么也没有显示
当我应用此然后listview显示与该数字有关的数据.

String query_fetchSMS = "select * from " + "smss" +  " group by " + "contactnumber" + " = \"" + "1234567" + "\"" ;

在查询之后,列表视图在我的主列表视图中向我显示该编号中的一条消息,然后在其中显示5条消息.这正是我想要的.但是为什么上层查询不起作用?我想同时显示两个数字消息

问题在什么地方发生?
使用简单的分组查询时不显示结果,但在分组依据中指定数字时显示结果.
任何人都可以帮助Iam卡住

最佳答案
如果使用prepared statements,您将不会遇到这些麻烦.它们通常更快(如果您需要多次执行相同的查询),更健壮并且通常不会导致难以解决的语法错误.

PreparedStatement pstmt = con.prepareStatement( "insert into smss " +  
   "(contactnumbe,contactname,message,date)" +
   "values (?,?,?,?)";

看到它简单了多少?然后,您可以一对一地绑定参数.无需担心正确地转义它们.准备好的语句会自动为您处理.

  stmt.setInt(msg_from.toString());

对于每个参数,依此类推.通过问题进入您的GROUP,我会尝试这样的事情:

"select contactnumber, contactname, count(*) from smss group by contactnumber" ;

请注意,您可以执行SELECT * FROM smss,但是日期和消息列是不确定的,因为您是按联系人号码分组的.如果有多个来自同一号码的消息,则不能保证将显示哪个日期和消息.但是,也可以通过巧妙使用子查询和排序来控制它.

转载注明原文:按查询分组在列表视图android中显示一些意外结果 - 代码日志