首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Cursor治理

2012-09-12 
Cursor管理public class Events extends ListActivity {// ...private static String[] FROM { _ID, TIM

Cursor管理

public class Events extends ListActivity {   // ...   private static String[] FROM = { _ID, TIME, TITLE, };   private static String ORDER_BY = TIME + " DESC";   private static int[] TO = { R.id.rowid, R.id.time, R.id.title, };   private EventsData events;   @Override   public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.main);      events = new EventsData(this);      try {         addEvent("Hello, Android!");         Cursor cursor = getEvents();         showEvents(cursor);      } finally {         events.close();      }   }   private void addEvent(String string) {      // Insert a new record into the Events data source.      // You would do something similar for delete and update.      SQLiteDatabase db = events.getWritableDatabase();      ContentValues values = new ContentValues();      values.put(TIME, System.currentTimeMillis());      values.put(TITLE, string);      db.insertOrThrow(TABLE_NAME, null, values);   }   private Cursor getEvents() {      // Perform a managed query. The Activity will handle closing      // and re-querying the cursor when needed.      SQLiteDatabase db = events.getReadableDatabase();      Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null,            null, ORDER_BY);      startManagingCursor(cursor);      return cursor;   }   private void showEvents(Cursor cursor) {      // Set up data binding      SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,            R.layout.item, cursor, FROM, TO);      setListAdapter(adapter);   }}


 

public class EventsProvider extends ContentProvider {   private static final int EVENTS = 1;   private static final int EVENTS_ID = 2;   /** The MIME type of a directory of events */   private static final String CONTENT_TYPE      = "vnd.android.cursor.dir/vnd.example.event";   /** The MIME type of a single event */   private static final String CONTENT_ITEM_TYPE      = "vnd.android.cursor.item/vnd.example.event";   private EventsData events;   private UriMatcher uriMatcher;   // ...         @Override   public boolean onCreate() {      uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);      uriMatcher.addURI(AUTHORITY, "events", EVENTS);      uriMatcher.addURI(AUTHORITY, "events/#", EVENTS_ID);      events = new EventsData(getContext());      return true;   }         @Override   public Cursor query(Uri uri, String[] projection,         String selection, String[] selectionArgs, String orderBy) {      if (uriMatcher.match(uri) == EVENTS_ID) {         long id = Long.parseLong(uri.getPathSegments().get(1));         selection = appendRowId(selection, id);      }      // Get the database and run the query      SQLiteDatabase db = events.getReadableDatabase();      Cursor cursor = db.query(TABLE_NAME, projection, selection,            selectionArgs, null, null, orderBy);      // Tell the cursor what uri to watch, so it knows when its      // source data changes      cursor.setNotificationUri(getContext().getContentResolver(),            uri);      return cursor;   }         @Override   public String getType(Uri uri) {      switch (uriMatcher.match(uri)) {      case EVENTS:         return CONTENT_TYPE;      case EVENTS_ID:         return CONTENT_ITEM_TYPE;      default:         throw new IllegalArgumentException("Unknown URI " + uri);      }   }         @Override   public Uri insert(Uri uri, ContentValues values) {      SQLiteDatabase db = events.getWritableDatabase();      // Validate the requested uri      if (uriMatcher.match(uri) != EVENTS) {         throw new IllegalArgumentException("Unknown URI " + uri);      }      // Insert into database      long id = db.insertOrThrow(TABLE_NAME, null, values);      // Notify any watchers of the change      Uri newUri = ContentUris.withAppendedId(CONTENT_URI, id);      getContext().getContentResolver().notifyChange(newUri, null);      return newUri;   }         @Override   public int delete(Uri uri, String selection,         String[] selectionArgs) {      SQLiteDatabase db = events.getWritableDatabase();      int count;      switch (uriMatcher.match(uri)) {      case EVENTS:         count = db.delete(TABLE_NAME, selection, selectionArgs);         break;      case EVENTS_ID:         long id = Long.parseLong(uri.getPathSegments().get(1));         count = db.delete(TABLE_NAME, appendRowId(selection, id),               selectionArgs);         break;      default:         throw new IllegalArgumentException("Unknown URI " + uri);      }      // Notify any watchers of the change      getContext().getContentResolver().notifyChange(uri, null);      return count;   }         @Override   public int update(Uri uri, ContentValues values,         String selection, String[] selectionArgs) {      SQLiteDatabase db = events.getWritableDatabase();      int count;      switch (uriMatcher.match(uri)) {      case EVENTS:         count = db.update(TABLE_NAME, values, selection,               selectionArgs);         break;      case EVENTS_ID:         long id = Long.parseLong(uri.getPathSegments().get(1));         count = db.update(TABLE_NAME, values, appendRowId(               selection, id), selectionArgs);         break;      default:         throw new IllegalArgumentException("Unknown URI " + uri);      }      // Notify any watchers of the change      getContext().getContentResolver().notifyChange(uri, null);      return count;   }         /** Append an id test to a SQL selection expression */   private String appendRowId(String selection, long id) {      return _ID + "=" + id            + (!TextUtils.isEmpty(selection)                  ? " AND (" + selection + ')'                  : "");   }      }


 

热点排行