android应用间数据传递(使用ContentProvider及SQLite在应用间传递数据)

创建一个新工程LearnContentWrite,一个空的Activity

创建一个类MyProvider extends ContentProvider,默认重写如下方法(我们发现其实ContentProvider非常类似数据库操作,所有我们就是使用ContentProvider来操作数据库的查询、删除、添加等操作):
delete
getType
insert
onCreate
query
update
 

在LearnContentWrite中的AndroidManifest.xml添加允许外部调用的配置信息

<provider android:name="MyProvider" android:exported="true" android:authorities="com.czg.cp">provider>
 

具体位置:

<activity android:name=".MainActivity" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
  
        <category android:name="android.intent.category.LAUNCHER" />
    intent-filter>
activity>
  
  <provider android:name="MyProvider" android:exported="true" android:authorities="com.czg.cp">provider>
 

 

MyProvider.java代码
public class MyProvider extends ContentProvider {
    public static final Uri URI=Uri.parse("content://com.czg.cp");  //与AndroidManifest.xml中声明的authorities保持一致

  
    SQLiteDatabase database;
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
  
    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }
  
    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        database.insert("tab", "_id", values);
  //    database.close();
        return null;
    }
  
    @Override
    public boolean onCreate() {
        //第一个参数SQLite数据库名,第二个参数表示只能被当前这个类调用
        database=getContext().openOrCreateDatabase("mycp.db3", Context.MODE_PRIVATE,null);
        database.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");
        return true;
    }
  
    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        Cursor cursor = database.query("tab", null, null, null, null, null, null);
        return cursor;
    }
  
    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
}

 

LearnContentWrite项目的MainActivity.java代码
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btnWriteSQLite).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goWriteSQLite();
            }
        });
    }
  
    private void goWriteSQLite() {
        ContentValues values=new ContentValues();
        values.put("name","Java语言");
        values.put("name","delphi语言");
        values.put("name","C#语言");
        values.put("name","VBScript语言");
  
        getContentResolver().insert(MyProvider.URI,values);
  
    }
}

 

先直接运行到手机或虚拟机中,并点击按钮
 
 

此时就会在手机系统的固定地方创建一个文件夹 

Android系统的Data文件夹\内部的Data\找到我们的工程 

 

此时通过Anroid Device Moniter工具我们可以看到。数据库已经创建成功

android应用间数据传递(使用ContentProvider及SQLite在应用间传递数据)_第1张图片

创建另外一个新工程LearnContentRead,一个空的Activity,LearnContentRead中的MainActivity.java代码

public class MainActivity extends AppCompatActivity {
    TextView textView;
    Uri URI=Uri.parse("content://com.czg.cp");  //与LearnContentWrite项目的Uri一致
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
  
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        textView= (TextView) findViewById(R.id.tvTextView);
        findViewById(R.id.btnReadContent).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goReadContent();
            }
        });
    }
  
    private void goReadContent() {
        Cursor cursor=getContentResolver().query(URI,null,null,null,null);
        cursor.moveToFirst();
        String value="";        
        for(int i=0;i"name"));
            System.out.println("第"+i+"个名字"+value);
            Toast.makeText(this,value,Toast.LENGTH_SHORT).show();
            cursor.moveToNext();
  
        }
        textView.setText(value);
    }
}

 

android应用间数据传递(使用ContentProvider及SQLite在应用间传递数据)_第2张图片

你可能感兴趣的:(Android开发知识体系)