2014-02-11 85 views
0

很少一段時間,我開始使用數據庫和內容提供商,我做了一個簡單的應用程序來學習如何使用它們。Access數據庫與供應商

現在,我正在開發另一個應用程序,它具有與我所做的功能幾乎相同的功能。我試圖實現適用於新應用的相同代碼,但是我收到一個錯誤,我無法找到原因。

這是logcat的輸出:

02-11 10:45:59.014: E/ActivityThread(22665): Failed to find provider info for com.final.reversegeocoding 
02-11 10:45:59.024: E/AndroidRuntime(22665): FATAL EXCEPTION: main 
02-11 10:45:59.024: E/AndroidRuntime(22665): java.lang.IllegalArgumentException: Unknown URL content://com.final.reversegeocoding/places 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.content.ContentResolver.insert(ContentResolver.java:913) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at com.final.reversegeocoding.GeocodingActivity.insertPlaces(GeocodingActivity.java:427) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at com.final.reversegeocoding.GeocodingActivity.access$27(GeocodingActivity.java:416) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at com.final.reversegeocoding.GeocodingActivity$6.onClick(GeocodingActivity.java:288) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.view.View.performClick(View.java:4475) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.view.View$PerformClick.run(View.java:18786) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.os.Handler.handleCallback(Handler.java:730) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.os.Looper.loop(Looper.java:137) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at android.app.ActivityThread.main(ActivityThread.java:5419) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at java.lang.reflect.Method.invokeNative(Native Method) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at java.lang.reflect.Method.invoke(Method.java:525) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
02-11 10:45:59.024: E/AndroidRuntime(22665): at dalvik.system.NativeStart.main(Native Method) 

這是該應用程序如下保存在數據庫中值的道路:

MainActivity(GeocodingActivity)

private void insertPlaces(String number, String street, String city, String country1, String country2, String lat, String lng){ 
     ContentValues newValues = new ContentValues(); 
     newValues.put(Places.NUMBER, number); 
     newValues.put(Places.STREET, street); 
     newValues.put(Places.CITY, city); 
     newValues.put(Places.COUNTRY1, country1); 
     newValues.put(Places.COUNTRY2, country2); 
     newValues.put(Places.LAT, lat); 
     newValues.put(Places.LNG, lng); 

     getContentResolver().insert(PlacesProvider.CONTENT_URI, newValues); 
} 

的ContentProvider (PlacesProvider)

public class PlacesProvider extends ContentProvider { 

    /*CONTENT_URI*/ 
    private static final String AUTHORITY = "com.final.reversegeocoding"; 
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/places"); 

    private PlacesDatabaseHelper mDbHelper; 
    private SQLiteDatabase database; 

    /**UriMatcher*/ 
    private static final int URI_PLACES = 1; 
    private static final int URI_PLACE_ITEM = 2; 

    private static final UriMatcher mUriMatcher; 
    static { 
     mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
     mUriMatcher.addURI(AUTHORITY, "places", URI_PLACES); 
     mUriMatcher.addURI(AUTHORITY, "places/#", URI_PLACE_ITEM); 
    } 


    public class Places implements BaseColumns { 

     public static final String NUMBER= "number"; 
     public static final String STREET= "street"; 
     public static final String CITY= "city"; 
     public static final String COUNTRY1= "country1"; 
     public static final String COUNTRY2= "pacountry2s"; 
     public static final String LAT = "latitude"; 
     public static final String LNG = "longitude"; 
    } 


    @Override 
    public boolean onCreate() { 
     mDbHelper = new PlacesDatabaseHelper(getContext()); 
     return true; 
    } 

    @Override 
    public Uri insert(Uri uri, ContentValues values) { 

     database = mDbHelper.getWritableDatabase(); 
     long id = database.insert(PlacesDatabaseHelper.TABLE_NAME, null, values); 
     Uri result = null; 

     if (id >= 0){ 
      result = ContentUris.withAppendedId(CONTENT_URI, id); 
      getContext().getContentResolver().notifyChange(uri, null); 
     } 
     return result; 
    } 

回答

0

已解決。

剛纔忘了申報清單中的供應商:

<provider 
    android:name=".database.PlacesProvider" 
    android:authorities="com.final.reversegeocoding" 
    android:multiprocess="true" />