Android 使用CursorLoader获取手机短信

本文介绍了如何在Android中使用CursorLoader实现数据加载,并通过AsyncTaskLoader工作机制进行数据查询和更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New Roman', Times, sans-serif; font-size: 14px; line-height: 25.2px;"></span><pre name="code" class="java">CursorLoader<span style="font-family: Georgia, 'Times New Roman', Times, sans-serif; line-height: 25.2px;">提供了一个基于AsyncTaskLoader工作机制的Loader,查看源码可以看到其继承于AsyncTaskLoader,一般继承OnQueryTextListener,可用于查询、更改数据源作用。</span>

public class MainActivity extends Activity implements LoaderCallbacks<Cursor>{

	private ListView listview;
	private TextView tvEmpty;
	private SimpleCursorAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		listview = (ListView) findViewById(R.id.lv_display_sms);
		tvEmpty = (TextView) findViewById(R.id.tv_empty);
	    
		LoaderManager manager=getLoaderManager();
		
		
	    adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.activity_item, null, new String[]{"address","body"}, new int[]{R.id.tv_address,R.id.tv_content},SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
	    listview.setAdapter(adapter);
	    //有数据就显示listview 没有数据就显示textview
	    listview.setEmptyView(tvEmpty);
	    
	    manager.initLoader(1, null, this);
	}

	@Override
	public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
		CursorLoader loader=new CursorLoader(getApplicationContext(), Uri.parse("content://sms"), null, null, null, null);
		return loader;
	}

	@Override
	public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
		adapter.swapCursor(arg1);
	}

	@Override
	public void onLoaderReset(Loader<Cursor> arg0) {
		adapter.swapCursor(null);
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值