未读信息个数等于零时不弹窗,否则弹窗
07-18 23:11:51.863: E/AndroidRuntime(5424): FATAL EXCEPTION: main
07-18 23:11:51.863: E/AndroidRuntime(5424): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
07-18 23:11:51.863: E/AndroidRuntime(5424): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
07-18 23:11:51.863: E/AndroidRuntime(5424): at java.util.ArrayList.get(ArrayList.java:304)
07-18 23:11:51.863: E/AndroidRuntime(5424): at com.txrj.sms.activity.ShowSmsActivity.showSms(ShowSmsActivity.java:67)
07-18 23:11:51.863: E/AndroidRuntime(5424): at com.txrj.sms.activity.ShowSmsActivity$1.handleMessage(ShowSmsActivity.java:78)
07-18 23:11:51.863: E/AndroidRuntime(5424): at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 23:11:51.863: E/AndroidRuntime(5424): at android.os.Looper.loop(Looper.java:137)
07-18 23:11:51.863: E/AndroidRuntime(5424): at android.app.ActivityThread.main(ActivityThread.java:4517)
07-18 23:11:51.863: E/AndroidRuntime(5424): at java.lang.reflect.Method.invokeNative(Native Method)
07-18 23:11:51.863: E/AndroidRuntime(5424): at java.lang.reflect.Method.invoke(Method.java:511)
07-18 23:11:51.863: E/AndroidRuntime(5424): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
07-18 23:11:51.863: E/AndroidRuntime(5424): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
07-18 23:11:51.863: E/AndroidRuntime(5424): at dalvik.system.NativeStart.main(Native Method)
如下所示。加上蓝色字体的代码,判断是否存在未读短信,如果无未读短信,不更新对话框中的数据。
void showSms(int index) {
TxrjMessage msg = list.get(index);
mBody.setText(msg.getBody());
mSender.setText(msg.getNumber());
mDateTime.setText(TxrjDateUtil.getSmsTime(msg.getTime()));
mSmsCount.setText((index+1)+"/"+list.size());
}
Handler mHander = new Handler(){
public void handleMessage(android.os.Message msg) {
switch(msg.what) {
case TxrjConstant.WHAT_UPDATE_SMS_DIALOG:
if(list.size()>=1) { // 这个判断是新加上去的
showSms(0);
}
break;
}
}
};
如果程序进行了如下的更改,那么就不会出现以上的异常。
收到新短信时,且当前界面是短信列表界面
(1) 收到的短信正在在当前会话中,那就不必再以弹窗的形式显示新短信了吧!
(2) 收到的选项不在当前会话中,那就要以弹窗的形式显示新的短信了!
实现方法:在ShowSmsActivity的onCreate方法中,到sms数据库表中获取未读短信数据。
如果没有获取到数据,那就表示未读短信已经在短信列表界面中被更改为已读状态,然后就调用finish()方法结束掉本界面,否则
如果获取到数据,就继续往下执行,将数据以弹窗形式显示出来。
protected void onCreate(android.os.Bundle savedInstanceState) {
Log.i("txrjsms", "ShowSmsActivity.onCreate");
super.onCreate(savedInstanceState);
mContext = this;
// 如果没有未读短信,在本揭界面显示出来之前就结束掉。
list = SmsDataManager.getUnreadMessages(mContext); // mContext必须在此之前就赋值,也可以传入this作为实参。
if(list.size()==0){
finish();
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.sms_popup_dialog);
mBody = (TextView) findViewById(R.id.sms_body);
mSender = (TextView) findViewById(R.id.sms_sender);
mDateTime = (TextView) findViewById(R.id.sms_time);
mSmsCount = (TextView) findViewById(R.id.sms_count);
mLayoutDelsms = (RelativeLayout) findViewById(R.id.layout_deletesms);
findViewById(R.id.doRead).setOnClickListener(this);
findViewById(R.id.doReply).setOnClickListener(this);
findViewById(R.id.deleteSms).setOnClickListener(this);
findViewById(R.id.closeWindow).setOnClickListener(this);
mBody.setMovementMethod(ScrollingMovementMethod.getInstance());
// mHander.postDelayed(new LoadUnreadSmsTask(), 0);
mHander.sendEmptyMessage(TxrjConstant.WHAT_UPDATE_SMS_DIALOG);
}