未读信息个数等于零时不弹窗,否则弹窗

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

posted on 2013-07-18 23:25  勤修  阅读(384)  评论(0编辑  收藏  举报

导航