編輯:關於Android編程
在編寫Android程序的時候,有時候我們會需要將程序中的某些數據暴露給其他的程序訪問,這時候我們就可以使用ContentProvider實現該功能。ContentProvider可以通過一定的格式將我們程序中的數據(可能是私有文件中的數據或者數據庫中的數據等)暴露給其他程序訪問。
在編寫ContentProvider的時候我們需要使用如下的步驟:
1 編寫一個java類繼承ContentProvider類,然後實現裡面的方法。
2 在AndroidManifest.xml配置該ContentProvider。
編寫完了我們還需要從該ContentProvider獲取數據,這時候我們就可以直接實例化一個ContentResolver對象,然後調用其中的方法對數據進行操作。
下面簡單列出部分代碼:
自定義的ContentProvider代碼:
package com.mxy;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;
/**
* 使用contentProvider的時候 數據庫不需要關閉
* @author mxy
* 我們在操作該ContentProvider數據的時候,需要根據特定的Uri去操作
* Uri構造格式如下:content:///自定義內容
*/
public class MyProvider extends ContentProvider {
private static int NOMATCH = -1;
private static int INSERT = 1;
private static int QUERY = 2;
private static int UPDATE = 3;
private static int DELETE = 4;
//為了方便我們操作Google提供了UriMatcher,我們可以通過該類去構造我們能夠匹配
//的Uri,當然我們也可以自己去進行匹配,但是那樣容易書寫錯誤
private static UriMatcher matcher = new UriMatcher(NOMATCH);
static{
matcher.addURI("com.mxy.MyProvider", "insert", INSERT);
matcher.addURI("com.mxy.MyProvider", "query", QUERY);
matcher.addURI("com.mxy.MyProvider", "update", UPDATE);
matcher.addURI("com.mxy.MyProvider", "delete", DELETE);
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
Log.i("mxy", "provider delete" + matcher.match(uri));
return 0;
}
@Override
public String getType(Uri uri) {
Log.i("mxy", "provider getType" + matcher.match(uri));
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
Log.i("mxy", "provider insert" + matcher.match(uri));
return null;
}
@Override
public boolean onCreate() {
Log.i("mxy", "provider onCreate");
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Log.i("mxy", "provider query" + matcher.match(uri));
if(QUERY == matcher.match(uri)){
PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}else{
return null;
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
Log.i("mxy", "provider update" + matcher.match(uri));
return 0;
}
}
上面的代碼中使用到了Sqlite數據的操作,我沒有粘貼出來,可以下載源碼工程查看。
AndroidManifest.xml需要配置Provider:
package com.mxy.contentProviderReader;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//讀取contentprovider 數據
ContentResolver resolver = this.getContentResolver();
Uri uri = Uri.parse("content://com.mxy.MyProvider/query");
Cursor cursor = resolver.query(uri, null,null ,null, null);
Log.i("mxy", cursor + "--------" );
while(cursor != null && cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("id"));
String number = cursor.getString(2);
Log.i("mxy", "id:" + id + " number:" + number);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}兩個程序都沒有見面元素,結果都是在logcat中顯示的。
例子工程下載地址:http://download.csdn.net/detail/mengxiangyue/7079701
http://download.csdn.net/detail/mengxiangyue/7079717
轉載請注明出處:http://blog.csdn.net/mengxiangyu
Android開發之天氣趨勢折線圖
先來看下效果:控件內容比較簡單,就是一個普通的折線圖,上下分別帶有數字,點擊的時候顯示當天溫度的差值。 創建一個類繼承自View,並添加兩個構造方法:publi
給Android的APK程序簽名和重新簽名的方法
簽名工具的使用Android源碼編譯出來的signapk.jar既可給apk簽名,也可給rom簽名的。使用格式:java –jar signapk.jar [-w] pu
Android初識之Activity組件
之前自己的編程完全是在PC上進行的,而且主要是在算法和數據結構上。由於某些需要加之認識到Android的重要性,且大學走到現在基本上沒什麼課了,空閒時間很多,於是就開始學
XMPP系列(六)---創建群組
最近公司項目需要,要做一個自己的IMSDK,順便先把之前沒有記錄的群聊功能記錄一下。先上資料,查看XMPP群聊相關的資料,可以去這裡看協議:XEP-0045 。創建群組X