Loader異步獲取短信記錄

*異步獲取短信記錄

*/public class MainActivity extends Activity implements LoaderCallbacks{

private LoaderManager manager;

private ContentResolver resolver;

private Uri uri;

private ListView listView;

private SimpleCursorAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

listView = (ListView) findViewById(R.id.listView);

adapter = new SimpleCursorAdapter(this,

android.R.layout.simple_list_item_2,

null,

new String[]{Sms.Draft.ADDRESS,Sms.Draft.BODY},

new int[]{android.R.id.text1,android.R.id.text2},

SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

listView.setAdapter(adapter);

resolver = getContentResolver();

uri = Sms.CONTENT_URI;//Uri.parse("content://sms");

manager = getLoaderManager();

//如果是v4包,那么activity首先要是屬于v4,獲取方式不同

// manager = getSupportLoaderManager();

manager.initLoader(2, null, this);

}

@Override

public Loader onCreateLoader(int id, Bundle args) {

//Log.i("info", "======="+id +args);

//創建一個loader對象

AsyncTaskLoader loader = new AsyncTaskLoader(this) {

@Override

protected void onStartLoading() {

super.onStartLoading();

//如果是第一次加載loader,必須強制加載數據

forceLoad();

}

//在子線程中調用,在這個方法中就去執行查詢數據庫的操作

@Override

public Cursor loadInBackground() {

//發起查詢動作

Cursor cursor = resolver.query(uri, null, null, null, null);

//必須要返回游標,返回到創建loader里面

return cursor;

}

};

//這個loader中就有攜帶cursor游標

return loader;

}

@Override

public void onLoadFinished(Loader loader, Cursor data) {

adapter.swapCursor(data);

}

@Override

public void onLoaderReset(Loader loader) {

adapter.swapCursor(null);

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容