如何使用SQLite中的一些特定数据填充listview?不完整

时间:2014-03-10 10:50:18

标签: android database sqlite listview sms

在我的Android短信应用程序中,我不想在本机收件箱中显示这些短信并发送项目。我创建了一个SQLite数据库,用于存储发送和接收的SMS作为私有应用程序。

Sqlite数据库代码:

protected static final String Table1=("CREATE TABLE "
        +TABLE_SMS+" ("
        + KEY_MESSAGEID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
        +SMS_Time+ " TEXT, "
        +PHONE_NUMBER+ " TEXT, "
        +MESSAGE_BODY+ " TEXT, "
        +FLAG+" TEXT);");  

public void Insert_sms_data(String formatedTime, String number, String body,String flag){
    try{

        SQLiteDatabase DB = this.getWritableDatabase(); 
        ContentValues cv = new ContentValues();
        cv.put(SMS_Time, formatedTime);
        cv.put(PHONE_NUMBER, number);
        cv.put(MESSAGE_BODY, body);
        cv.put(FLAG, flag);
        DB.insert(TABLE_SMS, null, cv);
        DB.close();

    }
    catch(Exception ex)
    {
        Log.e("ERROR in insertion", ex.toString());
    }

}
public Cursor Return_All(){

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cur = db.rawQuery("SELECT * FROM "+"SMS_TABLE_RCV", null);
        return cur;

    }

接收短信并将其存储在数据库中,如下所示:

flag = "0";
        DBmanager= new DbManager(context);
        DBmanager.open();
        DBmanager.Insert_sms_data(formatedTime ,number,body,flag);
        DBmanager.close();

在listview中发送短信和显示短信的代码如下:

public class ChatActivity extends ListActivity {

private MyListAdapter adapter;
ArrayList<String> item_id = new ArrayList<String>();
ArrayList<String> item_phone_num = new ArrayList<String>();
ArrayList<String> item_msg_body = new ArrayList<String>();
ArrayList<String> item_time = new ArrayList<String>();
ArrayList<String> item_flag = new ArrayList<String>();
ArrayList<String> items = new ArrayList<String>();
private Button btn_send;
DbManager manager;
Cursor Cursor;
ViewHolder holder12;
String contact_for_chat;
String contact_no;
String message_body = "";
Calendar c;
SimpleDateFormat sdf;
String time;
EditText et_chat;
String flag;
String msg = "";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Bundle bundle = getIntent().getExtras();
    contact_for_chat = bundle.getString("contact_name");
    contact_for_chat = contact_for_chat.replace(" ", "");
    contact_no = Util.getContactNumber(contact_for_chat, ChatActivity.this);
    Toast.makeText(getApplicationContext(), contact_no, Toast.LENGTH_LONG).show();
    final ViewHolder holder = new ViewHolder();
    manager = new DbManager(this);
    Cursor = manager.Return_All();
    showEvents(Cursor);

    c = Calendar.getInstance();
    sdf = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
    time = sdf.format(c.getTime());
    setActionBar();
    findViewsById();
    adapter = new MyListAdapter(this);
    setListAdapter(adapter);

    btn_send = (Button) findViewById(R.id.button1);
    btn_send.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

            SendSMS();
        }
    });
}

protected void SendSMS() {
    SmsManager sms_manager = SmsManager.getDefault();
    message_body = et_chat.getText().toString();
    ArrayList<String> parts = sms_manager.divideMessage(message_body);
    sms_manager.sendMultipartTextMessage(contact_no, null, parts, null, null);
    flag = "1";
    manager.Insert_sms_data(time, contact_no, message_body,flag);
    msg+= "SMS to :" + contact_for_chat + " \n";
    msg += "having number:" + contact_no + " \n";
    msg += "as" +message_body + " \n";
    msg += "at"+ time + " \n";
    Toast.makeText(getApplicationContext(), ""+msg , Toast.LENGTH_LONG).show();

}

private void setActionBar() {
    ActionBar mActionBar = getActionBar();
    mActionBar.setDisplayHomeAsUpEnabled(false);
    mActionBar.setDisplayShowTitleEnabled(false);
    LayoutInflater mInflater = LayoutInflater.from(this);
    View mCustomView = mInflater.inflate(R.layout.actionbar_chat, null);
    TextView tv_chat = (TextView)mCustomView.findViewById(R.id.title_text);
    tv_chat.setText(contact_for_chat);
    ColorDrawable colorDaawable = new ColorDrawable(Color.parseColor("#CFCFC4"));
    mActionBar.setBackgroundDrawable(colorDaawable);
    mActionBar.setLogo(R.drawable.ic_launcher);
    mActionBar.setDisplayHomeAsUpEnabled(true);
    mActionBar.setCustomView(mCustomView);
    mActionBar.setDisplayShowCustomEnabled(true);
}

private void findViewsById() {
    et_chat = (EditText)findViewById(R.id.et_chat);
    btn_send = (Button)findViewById(R.id.btn_send);
}

private void showEvents(Cursor cursor) {

    item_id = new ArrayList<String>(cursor.getCount());
    item_phone_num = new ArrayList<String>(cursor.getCount());
    item_msg_body = new ArrayList<String>(cursor.getCount());
    item_time = new ArrayList<String>(cursor.getCount());
    item_flag = new ArrayList<String>(cursor.getCount());
    int i=0;
    while (cursor.moveToNext()) {
        item_id.add(i+"");
        item_time.add(cursor.getString(1));
        item_msg_body.add(cursor.getString(3));
        item_phone_num.add(cursor.getString(2));
        item_flag.add(cursor.getString(4));
        i++;
    }

  }
public class MyListAdapter extends BaseAdapter {
    Context con;
    private LayoutInflater layoutinf;
    ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
    ArrayList<String> items_ = new ArrayList<String>();

    public MyListAdapter(ChatActivity context) {
        con = context;
    }

    public int getCount() {
        return item_id.size();
    }

    public Object getItem(int position) {
        return item_id.size();
    }

    public long getItemId(int position) {
        return item_id.get(position).hashCode();
    }

    public View getView(final int position, View arg1, ViewGroup arg2) {

        View v = arg1;
        ViewHolder holder = null;
        if (v == null) {
            layoutinf = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = layoutinf.inflate(R.layout.row_chat, null);
            holder = new ViewHolder();

            holder.tv_contact = (TextView) v.findViewById(R.id.phone_num);
            holder.tv_sms_body = (TextView) v.findViewById(R.id.msg_body);
            holder.tv_time = (TextView) v.findViewById(R.id.time);

            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }

        if(item_flag.get(position).equals("1"))
        {
            holder.tv_sms_body.setBackgroundResource(R.drawable.bubble_green);

        }
                    else 
                    {
                        holder.tv_sms_body.setBackgroundResource(R.drawable.bubble_yellow);

                    }


        holder.tv_contact.setText("" + item_phone_num.get(position));


        holder.tv_sms_body.setText(item_msg_body.get(position));

        holder.tv_time.setText(item_time.get(position));

        return v;
    }
}

public class ViewHolder {

    private TextView tv_contact;
    private TextView tv_sms_body;
    private TextView tv_time;

}

}

我跟踪结果:

result http://dc728.4shared.com/img/u4aArL8pce/s3/144ab8d92d0/device-2014-03-10-151709.png

Angelina的联系人号码是5556,但是列表显示了从其他号码发送的短信,我怎样才能将我的列表视图仅用于选择那些特定的联系号码。 任何帮助将不胜感激。在此先感谢!!

2 个答案:

答案 0 :(得分:1)

您可以在sqllite数据库代码的Return_all()函数中添加where子句。传递调用return_all()时的值。

喜欢

public Cursor Return_All(Arraylist Where){

    SQLiteDatabase db = this.getReadableDatabase();
    String query= "where ";
    For(int i=0;i<where.size;i++)
    {
         query=query+"contact = "+where[i]+ " or "; }

   Cursor cur = db.rawQuery("SELECT * FROM "+"SMS_TABLE_RCV" + query , null);
    return cur; }

答案 1 :(得分:0)

而不是arrayList使用带键和值的hashMap,其中键是联系号码,值是消息,那么您可以使用键值来区分用户