public static SynchronizedView getView(Context ctx, String name, Record record) {
    String appendedPath = "records/" + record.getId() + "/views/" + name;
    Uri contentUri = Uri.withAppendedPath(HVContentContract.CONTENT_URI, appendedPath);

    Cursor cursor =
        ctx.getContentResolver()
            .query(contentUri, new String[] {"query", "date_synced"}, null, null, null);

    SynchronizedView view = null;

    try {
      if (cursor.getCount() > 0) {
        cursor.moveToFirst();

        String serializedQuery = cursor.getString(0);
        long syncDateMillis = cursor.getLong(1);

        view =
            new SynchronizedView(
                ctx,
                record,
                name,
                XmlSerializer.read(ThingRequestGroup2.class, serializedQuery),
                new Date(syncDateMillis));
      }
    } catch (Exception e) {
      throw new HVException("Could not get View.", e);
    }

    return view;
  }
  public static SynchronizedView makeView(
      Context ctx, Record record, String name, ThingRequestGroup2 query) {

    try {
      String serializedQuery = XmlSerializer.write(query);
      String appendedPath = "records/" + record.getId() + "/views/" + name;
      Uri contentUri = Uri.withAppendedPath(HVContentContract.CONTENT_URI, appendedPath);

      ContentValues values = new ContentValues();
      values.put("query", serializedQuery);
      values.put("date_synced", "0");

      ctx.getContentResolver().insert(contentUri, values);

      return new SynchronizedView(ctx, record, name, query, new Date(0));

    } catch (Exception e) {
      throw new HVException("Could not create SynchronizedView.", e);
    }
  }
  public AbstractThing getThingById(String thingId) {
    Cursor cursor =
        ctx.getContentResolver()
            .query(
                Uri.withAppendedPath(
                    HVContentContract.CONTENT_URI,
                    "records/" + record.getId() + "/things/" + thingId),
                new String[] {"thing_xml"},
                null,
                null,
                null);

    AbstractThing data = null;

    if (cursor.moveToFirst()) {
      Thing2 thing = XmlSerializer.safeRead(Thing2.class, cursor.getString(0));
      data = thing.getData();
    }

    cursor.close();

    return data;
  }
 private Uri getContentViewThingsUri() {
   String appendedPath = "records/" + record.getId() + "/views/" + name + "/things";
   return Uri.withAppendedPath(HVContentContract.CONTENT_URI, appendedPath);
 }
 public ThingResponseGroup2 getThings() {
   return record.getThings(query);
 }