2016-02-04 86 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文件內容://路徑。

相關問題