ListsActivity在广播接收器之后不更新

时间:2014-03-20 23:41:03

标签: android broadcastreceiver listactivity

简单来说,我希望每次收到新短信时我的短信列表都会更新。这是代码

    static String phoneNumber;
    int phoneID;
    private ListSMSAdapter adapter_1;
    public List<SMSData> smsList = new ArrayList<SMSData>();
    private PhoneDAO dao;

    private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final Bundle bundle = intent.getExtras();
            Log.i("MESSAGE", Integer.toString(smsList.size()));
            smsList.clear();
            smsList.addAll(fillSMS(phoneNumber));
            Log.i("MESSAGE", Integer.toString(smsList.size()));
            adapter_1.notifyDataSetChanged();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        dao = new PhoneDAO(this);

        Bundle showData = getIntent().getExtras();
        phoneNumber = showData.getString("phone_number");
        phoneID = showData.getInt("phone_id");

        adapter_1 = new ListSMSAdapter(this, fillSMS(phoneNumber));
        setListAdapter(adapter_1);
    }

    protected List<SMSData> fillSMS(String p){
        Uri uri = Uri.parse("content://sms/inbox");
        Cursor c = getContentResolver().query(uri, null, "address = \"" + p + "\"", null, null);
        startManagingCursor(c);

        // Read the sms data and store it in the list
        if (c.moveToFirst()) {
            for (int i = 0; i < c.getCount(); i++) {
                SMSData sms = new SMSData();
                sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
                sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
                smsList.add(sms);
                c.moveToNext();
            }
        }
        return smsList;
    }

现在第一个日志显示:5 (它应该显示6)

在addAll之后

:10

但即便如此,SMS列表也没有更新。有什么我想念的吗?

由于

更新

接收器正在工作,抱歉没有指出这一点。

问题似乎在updateReceiver中有“clear”和“addAll”

2 个答案:

答案 0 :(得分:0)

我在您的代码段中没有看到它,您是否曾致电registerReceiver给您updateReceiver?或者同样,使用AndroidManifest.xml中的<receiver>标记?

答案 1 :(得分:0)

我已对您的代码进行了一些修改,请检查

static String phoneNumber;
int phoneID;
private ListSMSAdapter adapter_1;
public List<SMSData> smsList = new ArrayList<SMSData>();
private PhoneDAO dao;

private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final Bundle bundle = intent.getExtras();
        Log.i("MESSAGE", Integer.toString(smsList.size()));
        smsList.clear();
        fillSMS(phoneNumber);
        Log.i("MESSAGE", Integer.toString(smsList.size()));
        adapter_1.notifyDataSetChanged();
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    dao = new PhoneDAO(this);

    Bundle showData = getIntent().getExtras();
    phoneNumber = showData.getString("phone_number");
    phoneID = showData.getInt("phone_id");
    fillSMS(phoneNumber);
    adapter_1 = new ListSMSAdapter(this, smsList);
    setListAdapter(adapter_1);
}

protected List<SMSData> fillSMS(String p){
    Uri uri = Uri.parse("content://sms/inbox");
    Cursor c = getContentResolver().query(uri, null, "address = \"" + p + "\"", null, null);
    startManagingCursor(c);

    // Read the sms data and store it in the list
    if (c.moveToFirst()) {
        for (int i = 0; i < c.getCount(); i++) {
            SMSData sms = new SMSData();
            sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
            sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
            smsList.add(sms);
            c.moveToNext();
        }
    }
}