这篇文章将为大家详细讲解有关如何正确编写Android 代码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
当系统启动完成时,会编写Android 代码为android.intent.action.BOOT_COMPLETED.我们可以编写一个BroadcastReceiver 接收这个广播就可以了。
在编写Android 代码中,对于数据的存贮,有几种方式,有文件方式,有文件式数据库方式,Android自带了一个SQLite数据库,做嵌入开发的人对这个跨平台的本地文件数据库一定不会陌生,在Android对于数据的访问,提出了新的方式,ContentProvider方式,类似于MS的ContentProvider方式的,OLEDB,及ODBC统一的数据方式。
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } public DatabaseHelper(Context ct,String dbName) { super(ct,dbName,null,1); } public boolean insert(String insert) { this.getWritableDatabase().execSQL(insert); return true; } public boolean update(String update) { this.getWritableDatabase().execSQL(update); return true; } public boolean delete(String del) { this.getWritableDatabase().execSQL(del); return true; } public Cursor query(String query) { Cursor cur = this.getReadableDatabase().rawQuery(query, null); return cur; } } 再创建一个使用者(消费者) package test.DB; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class DBActivity extends Activity { private SQLiteDatabase mdb = null; private DatabaseHelper helper = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initDatabase(); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub super.onCreateOptionsMenu(menu); menu.add(1, Menu.FIRST +1, 1, "GetName"); menu.add(1, Menu.FIRST +2, 2, "Test"); return true; } public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub super.onOptionsItemSelected(item); switch (item.getItemId()) { case Menu.FIRST+ 1: { TextView tv = (TextView)this.findViewById(R.id.view_main); tv.setText(this.getName()); break; } case Menu.FIRST + 2: { this.setTitle("Del Item..."); break; } } return true; } private void initDatabase() { helper = new DatabaseHelper(this,"dbfile"); //mdb = this.openOrCreateDatabase("dbfile", 0, null); //String sql_create = "create table test (id int, name TEXT)"; //mdb.execSQL(sql_create); String sql_insert = "insert into test(id, name) values(55, 'namexx')"; //mdb.execSQL(sql_insert); helper.insert(sql_insert); } private String getName() { String name = null; //mdb = helper.getReadableDatabase(); Cursor cur = helper.query("select * from test"); cur.moveToFirst(); do { namename = name + cur.getString(1)+ "\n"; } while(cur.moveToNext()); return name; } } 这些代码读起来是不是有点Visual Basic的感觉?呵呵,所以,以后说不定.net,Android,java,blackberry,最终都成为一致的API,当然,这只是我们的期望,这样大家不必整天花这么多时间学这些无聊的接口了。 好了,该我们的ContentProvider出场了,与Service,BroadcastReceiver等组件一样,继承特定的Interface,在AndroidManifest.xml里声明这个ContentProvider,调用者就可以拿来使用了。 首先我们定义一个ContentProvider: package test.DB; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.widget.Toast; public class TestProvider extends ContentProvider { private DatabaseHelper mdbHelper = null; final static String TABLE_NAME = "test"; @Override public int delete(Uri arg0, String arg1, String[] arg2) { mdbHelper.getWritableDatabase().delete(TABLE_NAME, arg1, arg2); return 0; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub mdbHelper.getWritableDatabase().insert(TABLE_NAME, "", values); return null; } @Override public boolean onCreate() { // TODO Auto-generated method stub mdbHelper = new DatabaseHelper(this.getContext(), "dbfile"); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor cur = mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null, null); Toast.makeText(this.getContext(), "test Cur!", Toast.LENGTH_SHORT); return cur; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { mdbHelper.getWritableDatabase().update(TABLE_NAME, values, selection, null); return 0; } } 老规矩,AndroidManifest.xml来定义这个Provider <provider android:label="test_provider" android:authorities="com.my.provider" android:name="TestProvider"> </provider> 这里的android:authorities = "com.my.provider"是标识这个ContentProvider,调用者可以根据这个标识来找到它, 我们组合一个能找到它的Uri, public class ProviderConst { public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test"); } content 指的是内容提供者ContentProvider。 //com.my.provider映射到我们已定义的那个ContentProvider标识 /test这个作为一个参数,传给ContentProvider,可以根据这个参数来决定操作目标,比如数据库中的哪张表,文件中的那一部分数据等。 我们来操作这个内容提供者: private String getName() { String name = null; Cursor cur = this.getContentResolver().query(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null); if (cur == null) return null; cur.moveToFirst(); do { namename = name + cur.getString(1)+ "\n"; } while(cur.moveToNext()); return name; } 我们也可以这样使用: private String getName() { String name = null; Cursor cur = this.managedQuery(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null); if (cur == null) return null; cur.moveToFirst(); do { namename = name + cur.getString(1)+ "\n"; } while(cur.moveToNext()); return name; }
编写Android 代码读起来是不是有点Visual Basic的感觉?呵呵,所以,以后说不定.net,Android,java,blackberry,最终都成为一致的API,当然,这只是我们的期望,这样大家不必整天花这么多时间学这些无聊的接口了。
关于如何正确编写Android 代码就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。