2016-02-04 75 views
0

我尝试使用Cursor查找创建的XML文件的content:// adres。如果文件夹包含1个元素,则XML文件将返回id = 0

我这样做与下面的代码:

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(); 
       } 

的问题是,我得到0 ID,而我在一个文件夹中的文件,并得到正确的ID(如3268),当我有2个或多个文件。相当奇怪的行为,我不知道是什么原因造成的。

回答

0

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

所以我需要做的是刚刚创建的文件添加到我的手机DB programmaticly与下面的代码:

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);  

当然你要光标开始前加入。发布的代码写得很好,它只需要对数据库进行更新。

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

相关问题