如果文件夹有1个元素XML文件,则Cursor返回id = 0

时间:2016-02-04 19:56:20

标签: android xml cursor

我尝试使用Cursor查找内容:// adres创建的XML文件。

我使用以下代码执行此操作:

 public static String xmlFilePath = Environment.getExternalStorageDirectory() + "/" + WiFiTransferService.FileServerAsyncTask.context.getPackageName()+ "/" + "variables" + ".xml";               

Cursor cursor = getContentResolver().query(
                        mFilesUri,
                        new String[]{MediaStore.Files.FileColumns._ID},
                        MediaStore.Files.FileColumns.DATA + "=?",
                        new String[]{xmlFilePath}, null);

                if (cursor != null && cursor.moveToFirst()) {
                    id = cursor.getInt(cursor
                            .getColumnIndex(MediaStore.Files.FileColumns._ID));
                }

                if (cursor != null) {
                    cursor.close();
                }

问题是,当我有2个或更多文件时,我在文件夹中有一个文件并获得正确的ID(例如3268),我得到0 id。非常奇怪的行为,我不知道是什么导致了这一点。

1 个答案:

答案 0 :(得分:0)

问题解决了!我已经在程序中创建了文件并将其存储在SD卡上,一切正常,但设备没有更新其数据库(DB)。当我在手机上手动复制这个文件时,一切都被添加了。

所以我需要做的是使用以下代码以编程方式将刚刚创建的文件添加到我的手机数据库中:

ContentValues values = new ContentValues();
                    values.put(MediaStore.Files.FileColumns.TITLE,
                            FilenameUtils.getBaseName(xmlFilePath));
                    values.put(MediaStore.Files.FileColumns.MIME_TYPE, "text/*");
                    values.put("_data", xmlFilePath);
                    getContentResolver().insert(MediaStore.Files.getContentUri("external"), values);    

当然你必须在Cursor开始之前添加它。发布的代码写得很好,只需要更新DB。

希望它能帮助避免这样的错误并展示如何正确提取XML文件内容://路径。