栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Android中使用合约类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Android中使用合约类?

您的合同基本上定义了数据库以及人们如何通过内容提供者与之交互。

合同类定义用于帮助应用程序使用内容提供者的内容URI,列名,意图操作和其他功能的常量。提供商不自动包含合同类别;提供者的开发人员必须定义它们,然后将其提供给其他开发人员。

话虽如此,您不一定需要使用Content
Provider来使用Contract类。我的示例包含内容提供者使用的常量(MIME和URI部分)。如果您不使用内容提供程序,则不需要这些部分。

我喜欢将合同类视为数据库架构,或者换句话说,它定义了数据库的设置方式。您可能会注意到,合同类中的所有内容都声明为静态的。这是因为您将永远不会实例化Contract类,而仅引用其中定义的常量。您可以在我的示例中看到,我的Contract类仅声明了一堆静态最终变量。该Contract类可以是其自己的文件,例如,我的文件称为TransitContract.java。

举例来说,您想更改其中一列的名称。您无需更改多个文件,只需更改合同类中列的值即可。您不在合约类内部进行任何类型的计算工作。

另一方面,SQLLiteOpenhelper类是Google提供的,以简化数据库的使用。在这里,您可以实现创建和设置初始数据库的方法。请参阅http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html。在实现这些方法之后,您要做的就是实例化您的助手类的实例,然后调用helperClassInstance.getWriteableDatabase()(或getReadableDatabase()),然后您的助手类会在必要时自动处理创建新数据库的工作,或返回已经存在的那个,等等。

该帮助程序通常实现为内部类,但也可以是其自己的独立类。但是,您要实现它。

我强烈建议您查看Google提供的记事本示例,因为它有一个很好的示例,说明了如何设置合同类。
请注意,他们还使用内容提供商。如果您有兴趣学习内容提供商,建议您在http://developer.android.com/guide/topics/providers/content-
provider-
basics.html上阅读更多内容。它对内容提供者和合同类有更深的了解。

这是使用您的代码的示例。 我实际上没有测试此代码,因此可能会有错误。如您所见,您可以在您认为必要的任何地方实例化db
helper。在此示例中,我在主要活动的onCreate中进行了此操作,但实际上,这是不好的做法。

数据库合同

public final class DatabaseContract {    public static final  int    DATAbase_VERSION   = 1;    public static final  String DATAbase_NAME      = "database.db";    private static final String TEXT_TYPE          = " TEXT";    private static final String COMMA_SEP          = ",";    // To prevent someone from accidentally instantiating the contract class,    // give it an empty constructor.    private DatabaseContract() {}    public static abstract class Table1 implements baseColumns {        public static final String TABLE_NAME       = "nameOfTable";        public static final String COLUMN_NAME_COL1 = "column1";        public static final String COLUMN_NAME_COL2 = "column2";        public static final String COLUMN_NAME_COL3 = "column3";        public static final String CREATE_TABLE = "CREATE TABLE " +     TABLE_NAME + " (" +     _ID + " INTEGER PRIMARY KEY," +     COLUMN_NAME_COL1 + TEXT_TYPE + COMMA_SEP +     COLUMN_NAME_COL2 + TEXT_TYPE + COMMA_SEP +     COLUMN_NAME_COL3 + TEXT_TYPE + " )";        public static final String DELETE_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;    }}

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {        public DatabaseHelper(Context context) {        super(context, DatabaseContract.DATAbase_NAME, null, DatabaseContract.DATAbase_VERSION);    }    // Method is called during creation of the database    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL(DatabaseContract.Table1.CREATE_TABLE);    }    // Method is called during an upgrade of the database    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        db.execSQL(DatabaseContract.Table1.DELETE_TABLE);        onCreate(db);    }}

MainActivity.java

public class MainActivity extends Activity {    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // Create new helper        DatabaseHelper dbHelper = new DatabaseHelper(getContext());        // Get the database. If it does not exist, this is where it will        // also be created.        SQLiteDatabase db = dbHelper.getWriteableDatabase();        // Create insert entries        ContentValues values = new ContentValues();        values.put(DatabaseContract.Table1.COLUMN_NAME_COL1, "value1");        values.put(DatabaseContract.Table1.COLUMN_NAME_COL2, "value2");        values.put(DatabaseContract.Table1.COLUMN_NAME_COL3, "value3");        // Insert the new row, returning the primary key value of the new row        long newRowId;        newRowId = db.insert(      DatabaseContract.Table1.TABLE_NAME,      null,      values);    }}

我的例子

public final class TransitContract {    public static final String AUTHORITY = "com.example.TransitProvider";    public static final String SCHEME = "content://";    public static final String SLASH = "/";    public static final String DATAbase_NAME = "transit.db";        public static final String[] SQL_CREATE_TABLE_ARRAY = {        Agency.CREATE_TABLE,        CalendarDates.CREATE_TABLE,        Calendar.CREATE_TABLE,        Routes.CREATE_TABLE,        Shapes.CREATE_TABLE,        Stops.CREATE_TABLE,        StopTimes.CREATE_TABLE,        Trips.CREATE_TABLE    };        public static final int[] RAW_IDS = {        R.raw.agency,        R.raw.calendar_dates,        R.raw.calendar,        R.raw.routes,        R.raw.shapes,        R.raw.stops,        R.raw.stop_times,        R.raw.trips,    };        private TransitContract() {}    public static final class Agency implements baseColumns {                private Agency() {}        public static final String TABLE_NAME = "Agency";        public static final String KEY_AGENCY_ID = "AgencyId";        public static final String KEY_NAME = "Name";        public static final String KEY_URL = "Url";        public static final String KEY_TIMEZONE = "Timezone";        public static final String KEY_LANG = "Language";        public static final String KEY_PHONE = "PhoneNumber";        public static final String KEY_FARE_URL = "FareUrl";                        public static final Uri CONTENT_URI = Uri.parse(SCHEME + AUTHORITY + SLASH + TABLE_NAME);                public static final Uri CONTENT_ID_URI_base = Uri.parse(SCHEME + AUTHORITY + SLASH + TABLE_NAME + SLASH);                public static final String DEFAULT_SORT_ORDER = KEY_AGENCY_ID + " ASC";                        public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_base_TYPE +     "/vnd.com.marylandtransitcommuters.agency";                public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_base_TYPE +     "/vnd.com.marylandtransitcommuters.agency";                public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("      + _ID + " INTEGER PRIMARY KEY,"      + KEY_AGENCY_ID + " TEXT,"      + KEY_NAME + " TEXT,"      + KEY_URL + " TEXT,"      + KEY_TIMEZONE + " TEXT,"      + KEY_LANG + " TEXT,"       + KEY_PHONE + " TEXT,"      + KEY_FARE_URL + " TEXT"      + ");";                public static final String DELETE_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;                public static final String[] KEY_ARRAY = { KEY_AGENCY_ID, KEY_NAME, KEY_URL, KEY_TIMEZONE, KEY_LANG, KEY_PHONE, KEY_FARE_URL        };    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号