zoukankan      html  css  js  c++  java
  • 【十二】注入框架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" />




  • 相关阅读:
    vmware-tools安装
    UBUNTU 安装教程
    CANO入门(三)
    CANOE入门(二)
    CANOE入门(一)
    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
    vmware-tools安装
    root权限
    ARM嵌入式开发中的GCC内联汇编__asm__
    OpenCV3.1.0+VS2015开发环境配置
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6761444.html
Copyright © 2011-2022 走看看