【十二】注入框架RoboGuice使用:(Your First Injected ContentProvider)

          上一篇我们简单的介绍了一下RoboGuice的使用(【十一】注入框架RoboGuice使用:(Your First Injection into a Custom View class)),今天我们来看下内容提供者(ContentProvider)的注入。

         和Robo*Activities一样,RoboContentProviders通过RoboGuice也能自动获得注入,为了简便我们可以注入 authority URI,这时我们需要定义下面自己的module:

public class ContentProvidersModule extends AbstractModule {
    @Override
    protected void configure() {
    }

    @Provides
    @Named("example_authority_uri")
    public Uri getExampleAuthorityUri() {
        return Uri.parse("content://com.example.data");
    }
}
       下面就是一个使用RoboGuice注入的Android ContentProvider

public class MyExampleContentProvider extends RoboContentProvider {

    @Inject
    @Named("example_authority_uri")
    private Uri contentUri;

    private UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

    @Override
    public boolean onCreate() {
        super.onCreate();
        uriMatcher.addURI(contentUri.getAuthority(), "foo/#", 0);
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        switch (uriMatcher.match(uri)) {
            case 0:
                // Return results of your query
                return null;
            default:
                throw new IllegalStateException("could not resolve URI: " + uri);
        }

        return null;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) {
        return 0;
    }
}
在你的代码中,你可以通过注入的 authority URI来回调content provider的方法:

public class ExampleActivity extends RoboFragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> {

    @Inject
    @Named("example_authority_uri")
    private Uri contentUri;


    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(this, Uri.withAppendedPath(contentUri, "foo"), null, null, null, null);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        getSupportLoaderManager().destroyLoader(1);
        // do something cool with the data!
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
    }

    public void start() {
        getSupportLoaderManager().initLoader(1, null, this);
    }
}
不要忘记你的content provinder在配置文件的注册

 <provider
            android:authorities="com.example.data"
            android:name=".MyExampleContentProvider"
            android:exported="false" />




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值