1

我正在編寫一個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調用顯示相應用戶的信息。

任何反饋或信息,爲什麼這是崩潰將是非常有益的。

+0

添加.provider當你調用這個ContentUri或刪除它你肯定,你不不要錯過在您的清單中添加Internet權限? – Hiral 2012-02-27 12:33:25

+0

謝謝,但我已經在那裏獲取推文,所有這些都在工作。我只是沒有粘貼完整的文件。 – brk3 2012-02-27 12:36:40

+0

你調用'content:// com.bourke.test /'content Uri,但你將其定義爲'content:// com.bourke.test.provider /' – Selvin 2012-02-27 12:43:08

回答

0

從錯誤我們可以假設,你打電話content://com.bourke.test/screenname/Arubin但是從你的代碼看起來應該是content://com.bourke.test.provider/screenname/Arubin ......所以你應該從public static final String AUTHORITY="...";

相關問題