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" />




  • 相关阅读:
    Redis基本概念、基本使用与单机集群部署
    Storm安装部署
    HBase单机和集群版部署
    Hive基础概念、安装部署与基本使用
    Hadoop — HDFS的概念、原理及基本操作
    随机森林
    深度学习入门: CNN与LSTM(RNN)
    word修改页眉使本页的页眉与别的页不一样
    几个值得学习的Java博客
    【转】求最短路径长度--简单易懂
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6761444.html
Copyright © 2011-2022 走看看