标签: android-contentresolver

如何将ContentResolver光标与数据库游标连接?

我通过查询ContentResolver从系统中获取记录.我维护数据库中项目的顺序.所以我想按照从我的数据库中获取的顺序显示项目.

我如何合并这两个信息?

编辑1

我现在正在寻找另一种方式.正如我理想的那样:

  • 通过我的数据库中保存的自定义订单获取联系人的订单(这涉及将CR与我的数据库游标连接,然后执行订单,以后使用CursorJoiner无法进行订购)
  • 但还有更多,如果连接不是唯一的,我想按联系人的名字排序作为最后一个度量

使用Cursor和Joiners是不可能的,因为order by缺少功能,我还需要返回一个Cursor,因为我将在ExpandableList中使用它

这也转换为TSQL

select * from contactsdata 
left join category on contactsdata.catid=category.id
order by category.pos asc, contact.display_name asc
Run Code Online (Sandbox Code Playgroud)

所以我现在正在寻找另一种选择.
我想在CR中加载一个临时数据库表中的所有数据,然后在临时表上进行查询,我可以在哪里连接表并按顺序执行操作?这听起来怎么样?

android cursor android-contentresolver

1
推荐指数
1
解决办法
4146
查看次数

电子邮件ContentResolver的问题

我正在使用以下代码在设备上构建电子邮件地址列表以显示在ListActivity.目前我可以检索确定的电子邮件地址,但它们的形式出现了:null (email@address.com)name (email@address.com)不是理想的.我正在使用的代码也应该检索名称:

Cursor c = getContentResolver().query(Email.CONTENT_URI,
        new String[]{Email.CONTACT_ID, Email.DISPLAY_NAME, Email.DATA},
        null, null, null);

addresses = new String[c.getCount()];
try{
    c.moveToFirst();
    for(int i = 0;i<c.getCount();i++){
        addresses[i] = c.getString(1) + " (" + c.getString(2) + ")";
        c.moveToNext();
    }
} finally {
    c.close();
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

android android-contentresolver

1
推荐指数
1
解决办法
1790
查看次数

Android | 通过电话号码检索联系人照片的最佳方法是什么?

我有一个应用程序需要获取给定联系人的照片.我有联系人的电话号码,有没有办法通过ContentResolver或任何其他表格通过电话号码检索联系人的照片?我一直在寻找,但没有找到答案.

我真的想强调使用电话号码获取联系人照片的重要性(如果存在).谢谢.

java eclipse android android-contentresolver

1
推荐指数
1
解决办法
3544
查看次数

在android中按字母顺序排序conctacts

您正在使用此代码从以下方法获取Android联系人列表中最后一个参数的联系人即 null

谁能告诉我如何按字母顺序对联系人列表进行排序?我通过哪个参数,所以我得到所需的输出:

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
Run Code Online (Sandbox Code Playgroud)

sorting android android-contentresolver android-contacts

1
推荐指数
1
解决办法
2509
查看次数

如何访问不同活动中片段的 contentResolver?

情况是我有一个MainFragment(extends a ListFragment, implements LoaderManager.LoaderCallbacks<Cursor>) 是从MainActivity. DetailsActivity从该片段调用一个新活动以在列表视图中显示某个项目的内容,将 id 作为意图参数。如何getContentResolver()使用 Uri 访问其方法?

我现在从访问内容解析器中得到的错误是:

`java.lang.IllegalArgumentException: Unknown URL content://com.xxxx.words.contentprovider/words`

uri = Uri.parse(MainContentProvider.CONTENT_URI.toString());
            getContentResolver().insert(uri, contentValues);

CONTENT_URI = Uri.parse("content://" + "com.xxxx.words.contentprovider" + "/" + "words");
Run Code Online (Sandbox Code Playgroud)

安卓清单文件:

<provider
        android:authorities="com.xxxx.words.contentprovider.MainContentProvider"
        android:name=".contentprovider.MainContentProvider"/>
Run Code Online (Sandbox Code Playgroud)

或者我应该只返回一个BundleDetailsActivity初始片段和访问的内容提供商?

android android-contentresolver android-contentprovider android-fragments android-activity

1
推荐指数
2
解决办法
1万
查看次数

Android - contentResolver.notifyChange()降低性能

我有一个覆盖的MyContentProvider类bulkInsert().在这种方法中,我使用SQLite事务在数据库中插入大约4,000行,这在Samsung Galaxy S4设备上大约需要25秒.

但是,当我从我的方法中删除此行时bulkInsert()...

getContext().getContentResolver().notifyChange(insertedId, null);

...总插入时间下降到大约1或2秒.

那么,有更好的方式来打电话notifyChange()吗?

我试过在另一个线程中调用它,像这样......

                    new Thread(new Runnable() {
                    public void run() {
                        getContext().getContentResolver().notifyChange(insertedId, null);
                    }
                }).start();
Run Code Online (Sandbox Code Playgroud)

......但它仍然缓慢,而由于某种原因,导致一个OutOfMemoryError.

为了完整,这是我的bulkInsert()方法......

    @Override
public int bulkInsert(Uri uri, ContentValues[] valuesArray) {

    /*
     *  Open a read / write database to support the transaction.
     */
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    String tableName;

    switch (uriMatcher.match(uri)) {
        case BRANDS_SEARCH:
            tableName = BRAND_NAMES_TABLE;
            break;
        case PRODUCTS_SEARCH:
            tableName = PRODUCTS_TABLE;
            break;
        case PARENT_COMPANIES_SEARCH:
            tableName …
Run Code Online (Sandbox Code Playgroud)

sqlite performance android android-contentresolver android-contentprovider

1
推荐指数
1
解决办法
510
查看次数

使用 ContentResolver 从游标中获取图库中的最近图像

我正在使用Cursor从图库中获取图像并从图库中获取所有图像,有没有办法只获取少数最近的图像,例如最近捕获的 20 张图像。

我面临的另一个问题是图像从旧到新的顺序,我想以相反的顺序(从新到旧)获取图像。

final String[] columns = { MediaStore.Images.Media.DATA,
                MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Run Code Online (Sandbox Code Playgroud)

我获取图像的代码:

public void getImg(){
    Cursor imagecursor = getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
            null, orderBy);

    int image_column_index = imagecursor
            .getColumnIndex(MediaStore.Images.Media._ID);
    this.count = imagecursor.getCount();
    this.thumbnails = new Bitmap[this.count];
    this.arrPath = new String[this.count];
    this.thumbnailsselection = new boolean[this.count];
    for (int i = 0; i < this.count; i++) {
        imagecursor.moveToPosition(i);
        int id = imagecursor.getInt(image_column_index);
        int dataColumnIndex = imagecursor
                .getColumnIndex(MediaStore.Images.Media.DATA);
        thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
                getApplicationContext().getContentResolver(), id,
                MediaStore.Images.Thumbnails.MICRO_KIND, null);
        arrPath[i] …
Run Code Online (Sandbox Code Playgroud)

android image-gallery cursor android-contentresolver

1
推荐指数
1
解决办法
1749
查看次数

ContentResolver更改图库文件夹名称

我正在使用此处指定的代码存储Bitmap图像并将其显示在图库中.

不幸的是,该代码让我将图像存储到"图片"文件夹中.

是否可以使用我决定的名称更改文件夹名称?

android image gallery android-contentresolver

1
推荐指数
1
解决办法
1014
查看次数

无法从Picasso中的file://路径加载图像

我正在尝试将图像加载到ImageView库中Picasso.

这是代码

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode!= Activity.RESULT_OK) return;

        switch (requestCode) {
            case PICK_GALLERY_IMAGE_REQUEST: {
                Uri imageUri = data.getData();
                Log.d(DEBGUG_TAG,"Image URI: "+imageUri.toString());


                Picasso picasso = Picasso.with(getApplicationContext());
                picasso.setLoggingEnabled(true);
                picasso.load(imageUri).error(R.drawable.c).into(testImgView, new com.squareup.picasso.Callback(){

                    @Override
                    public void onSuccess() {
                        Log.d(DEBGUG_TAG,"Success loading image from uri:PICASSO");
                    }

                    @Override
                    public void onError() {
                        Log.d(DEBGUG_TAG,"Cannot load image");
                    }
                });
Run Code Online (Sandbox Code Playgroud)

问题是从图库中选择图像时,它返回文件路径

D/debug: Image URI: file:///storage/emulated/0/DCIM/Camera/IMG_20170126_211524.jpg

这似乎不适用于Picasso作为返回错误并记录D/debug: Cannot load image错误方法.

但是,从另一个返回的应用程序中选择相同的图像Uri: D/debug: Image URI: content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F90455/ORIGINAL/NONE/1757236944成功.

有没有办法从文件路径加载图像?

android uri image android-contentresolver picasso

1
推荐指数
1
解决办法
4093
查看次数

ContentResolver查询方法无法使用,NoSuchMethodError

我正在创建一个应用程序来读取手机的手机通讯录.但是,由于我不知道的原因,我使用该query方法时遇到问题,因为我使用的是api版本.它说Call requires API level 26 (current min is 16): android.content.ContentResolver#query.

这是我在oncreate方法中使用的代码.

public void searchContacts() {
    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null);

    if (cursor.moveToFirst()) {
        do {
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            Log.i("try", name + " = " + number);
        } while (cursor.moveToNext());
    }



    cursor.close();
}
Run Code Online (Sandbox Code Playgroud)

我知道它应该可行,因为我一直在观看的教程API版本低于我的.

这是我的gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "raymundo.elsa.elsa"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" …
Run Code Online (Sandbox Code Playgroud)

android gradle android-contentresolver build.gradle android-studio-3.0

1
推荐指数
1
解决办法
1503
查看次数