我正在編寫一個Twitter應用程序,並遵循Android開發人員的Linkify指南(http://android-deve..linkify-your-text.html)使用戶名(例如@ brk3)可點擊。接收內容:///使用簡單的自定義提供程序的URI(ActivityNotFoundException)
然後,我創建了一個內容提供程序實現來獲取單擊它們時觸發的意圖。我的問題是,意圖似乎並沒有被找到我的供應商,所以就點擊我得到下面的異常的鏈接之一:(例子是用戶名點擊「Arubin」時)
E/AndroidRuntime(5228): android.content.ActivityNotFoundException: No Activity found to handle Intent {
act=android.intent.action.VIEW dat=content://com.bourke.test/screenname/Arubin (has extras) }
E/AndroidRuntime(5228): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.j
ava:1512)
E/AndroidRuntime(5228): at android.app.Instrumentation.execStartActivity(Instrumentation.java:138
4)
...
這裏在relavent一塊我AndroidManifest.xml中的:
<application
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:name="TestApplication"
android:uiOptions="splitActionBarWhenNarrow">
<provider
android:name="com.bourke.test.provider.TestProvider"
android:authorities="com.bourke.test.provider" />
<activity android:name="TestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType=
"vnd.android.cursor.item/vnd.test.screenname" />;
</intent-filter>
</activity>
...
和提供者:
package com.bourke.test.provider;
public class TestProvider extends ContentProvider {
/* The root authority for this provider */
public static final String AUTHORITY = "com.bourke.test.provider";
private static final String BASE_PATH = "screenname";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
+ "/" + BASE_PATH);
public static final int SCREEN_NAMES = 0;
public static final int SCREEN_NAME = 1;
private static final UriMatcher mUriMatcher = new UriMatcher(
UriMatcher.NO_MATCH);
static {
mUriMatcher.addURI(AUTHORITY, BASE_PATH, SCREEN_NAMES);
mUriMatcher.addURI(AUTHORITY, BASE_PATH+"/*", SCREEN_NAME);
}
@Override
public boolean onCreate() {
Log.d(TAG, "XXX: onCreate()");
/* The provider was successfully loaded */
return true;
}
@Override
public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) {
throw new UnsupportedOperationException();
}
@Override
public int delete(Uri uri, String where, String[] whereArgs) {
throw new UnsupportedOperationException();
}
@Override
public Uri insert(Uri uri, ContentValues initialValues) {
throw new UnsupportedOperationException();
}
@Override
public String getType(Uri uri) {
Log.d(TAG, "XXX: getType()");
switch (mUriMatcher.match(uri)) {
case SCREEN_NAMES:
Log.d(TAG, "XXX1: SCREEN_NAMES");
return "vnd.android.cursor.dir/vnd.test.screenname";
case SCREEN_NAME:
Log.d(TAG, "XXX2: SCREEN_NAME");
return "vnd.android.cursor.item/vnd.test.screenname";
default:
// any other kind of URL is illegal
throw new IllegalArgumentException("Unknown URL " + uri);
}
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sort) {
throw new UnsupportedOperationException();
}
}
正如你可以看到我真的不關心使用的後臺數據庫,儘管它可能是有用的在不久的將來添加。現在,我只是希望能夠獲取內容://com.bourke.test/screenname/風格的URI,因此我的活動可以使Twitter API調用顯示相應用戶的信息。
任何反饋或信息,爲什麼這是崩潰將是非常有益的。
添加
.provider
當你調用這個ContentUri或刪除它你肯定,你不不要錯過在您的清單中添加Internet權限? – Hiral 2012-02-27 12:33:25謝謝,但我已經在那裏獲取推文,所有這些都在工作。我只是沒有粘貼完整的文件。 – brk3 2012-02-27 12:36:40
你調用'content:// com.bourke.test /'content Uri,但你將其定義爲'content:// com.bourke.test.provider /' – Selvin 2012-02-27 12:43:08