【十二】注入フレームワークRoboGuice使用:(Your First Injected ContentProvider)
前回はRoboGuiceの使用について簡単に紹介しました(【十一】注入フレームRoboGuiceの使用:(Your First Injection into a Custom View class))、今日はコンテンツプロバイダ(ContentProvider)の注入について見てみましょう.
Robo*Activitiesと同様、RoboContentProvidersはRoboGuiceでも自動的に注入を得ることができ、簡単に注入できるようになりました authority URIでは、次のような独自のmoduleを定義する必要があります.
authority URIでcontent providerをコールバックする方法:
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" />