Android 自定义ContentProvider简单实例

所属分类: 软件编程 / Android 阅读数: 59
收藏 0 赞 0 分享

Android 自定义ContentProvider简单实例

Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下。

要使用ContentProvider来操作数据,必须要有保存数据的场所。可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库。

1,创建一个数据库帮助类,归根结底都是它在操作数据库。代码如下:

package com.njue; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
 
public class DBManager extends SQLiteOpenHelper { 
public static final String myProvider_table_name="myProvider_table_name"; 
String sql="create table myProvider_table_name(id integer,name text)"; 
  public DBManager(Context context) { 
    super(context, "myPrivoder.db", null, 1); 
    // TODO Auto-generated constructor stub 
  } 
 
  @Override 
  public void onCreate(SQLiteDatabase arg0) { 
    // TODO Auto-generated method stub 
   arg0.execSQL(sql); 
  } 
 
  @Override 
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
 
  } 
 
} 

2,创建一个myProvider类,该类继承ContentProvider,实现其抽象方法来操作数据库,该类引用DBManager类来获得数据库实例。

package com.njue; 
 
import android.content.ContentProvider; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.net.Uri; 
 
public class myProvider extends ContentProvider { 
  DBManager dbHelper; 
  @Override 
  public int delete(Uri arg0, String arg1, String[] arg2) { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db=dbHelper.getWritableDatabase(); 
    int id=db.delete(DBManager.myProvider_table_name, arg1, arg2); 
    if(id!=0)return id; 
    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 
    SQLiteDatabase db=dbHelper.getWritableDatabase(); 
    db.insert(DBManager.myProvider_table_name, "id", values); 
    return null; 
  } 
 
  @Override 
  public boolean onCreate() { 
    // TODO Auto-generated method stub 
    dbHelper=new DBManager(getContext()); 
    return true; 
  } 
 
  @Override 
  public Cursor query(Uri uri, String[] projection, String selection, 
      String[] selectionArgs, String sortOrder) { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db=dbHelper.getWritableDatabase(); 
    Cursor c=db.query(DBManager.myProvider_table_name,projection, selection, selectionArgs, null, null, sortOrder); 
    return c; 
  } 
 
  @Override 
  public int update(Uri uri, ContentValues values, String selection, 
      String[] selectionArgs) { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db=dbHelper.getWritableDatabase(); 
    int id=db.update(DBManager.myProvider_table_name, values, selection, selectionArgs); 
    if(id!=0)return id; 
    return 0; 
  } 
 
} 

3,ContextProvider必须声明才能使用,因此,需要在AndroidManifest.xml配置文件中声明。声明很简单,需要类名称和授权名称两个属性。

<provider android:name="myProvider" 
    android:authorities="com.njue.myProvider" /> 

 到这里,我们自定义的ContentProvider就完成了。我们可以在Eclipse中的File Explorer 窗口中看到自定义的ContentProvider

 4,简单测试

package com.njue; 
 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
 
public class Content_providerActivity extends Activity { 
  /** Called when the activity is first created. */ 
   Uri uri; 
   String AUTHORITY="content://com.njue.myProvider/myProvider_table_name"; 
   ContentResolver cr; 
   EditText input; 
   Button insert; 
   TextView show; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    input=(EditText)findViewById(R.id.input); 
    insert=(Button)findViewById(R.id.insert); 
    show=(TextView)findViewById(R.id.show); 
    uri=uri.parse(AUTHORITY); 
    cr=this.getContentResolver(); 
    insert.setOnClickListener(new Button.OnClickListener(){ 
 
      @Override 
      public void onClick(View v) { 
        // TODO Auto-generated method stub 
         ContentValues values=new ContentValues(); 
          values.put("name", input.getText().toString()); 
          cr.insert(uri, values); 
          Cursor c=cr.query(uri, null, null, null, null); 
          show.setText(""); 
          c.moveToFirst(); 
          while(c.moveToNext()){ 
           show.append(c.getString(1)+"\r\n"); 
          } 
          input.setText(""); 
      }}); 
     
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多