2017-08-05 33 views
0

こんにちは私の電話からすべてのdoc、docx、pdf、xls、txtをlistviewに表示しようとしています。私はthisを私のアプリに実装しようとしましたが、何とかこの行にエラーがありました。ContentResolver cr = context.getContentResolver();Androidのリストビューのストレージからdoc、docx、pdf、xls、txtを表示するには

編集:CommonsWareに感謝します。今、このラインnewVVI.mimeType = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE + "=?"));

に問題がIMと、これは私のコード

Uri uri = MediaStore.Files.getContentUri("external"); 

    String[] projection ={ MediaStore.Files.FileColumns._ID, 
      MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.TITLE} ; 

    String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?"; 
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf"); 
    String[] selectionArgsPdf = new String[]{ mimeType }; 
    String sortOrder = null; 

    Cursor allPdfFiles = getContentResolver().query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder); 


    if (allPdfFiles.moveToFirst()) { 
     do { 

      ImageViewInfo newVVI = new ImageViewInfo(); 
      int id = allPdfFiles.getInt(allPdfFiles.getColumnIndex(MediaStore.Files.FileColumns._ID)); 


      newVVI.filePath = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)); 
      newVVI.title = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE)); 
      newVVI.mimeType = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE + "=?")); 
      ImageRows.add(newVVI); 
     } while (cursor.moveToNext()); 


     allPdfFiles.close(); } 

である私はそれが正しいでしょうか?私を助けてください。

どのようにdocs、docx、xls、txtなどの複数の指定されたファイルをクエリできますか?私はそれをpdfと一緒にリストアップすることができます。

アドバンスでありがとう!

+0

別の質問でそれを置き換えるためにあなたの質問を編集しないでください。 「質問する」ボタンを使用して、別の質問をします。 – CommonsWare

+0

申し訳ありませんが、技術的には私の投稿を更新しましたが、まだ答えられていない質問があります。しかし、おかげで仲間私は次回に心に留めておこう:) – asgardwin7

答えて

0

この構文は、返された列をプロジェクションにリストされているように取得しようとすると正しくありません。投影によって必要な列が一覧表示されていることを確認します。それを各列がデータの別の属性を表すスプレッドシートと考えてください。 do whileループは、効率的に各行を処理し、その行の各要素を尋ねます。

正しくない:

allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(Medi‌​aStore.Files.FileCol‌​umns.MIME_TYPE + "=?")); 

正しい:

 String[] projection ={ MediaStore.Files.FileColumns._ID, 
     MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.TITLE, MediaStore.Files.FileColumns.MIME_TYPE} ; 

newVVI.filePath = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)); 
     newVVI.title = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE)); 
     newVVI.mimeType = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE)); 
+0

ありがとう!これは私のために、私の構文を訂正するためのおかげで動作します:) – asgardwin7

+0

あなたはどのように私はdocx、pptx、xlsxのような他のファイル拡張子をクエリできますか知っていますか? – asgardwin7

+0

MIMEタイプ「text/*」を試してください – Theo

0
Context context = null; 

あなたの最初の行はnullcontextを設定します。あなたはnullContextgetContentResolver()を呼び出そうとしているよう

ContentResolver cr = context.getContentResolver(); 

あなたの2行目は、NullPointerExceptionになります。

ActivityまたはServiceのような実際のContextが必要です。

+0

お返事ありがとう!私は自分の投稿を編集しましたが、この行にエラーがあります。 'newVVI.mimeType = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE +" =? "));' – asgardwin7

関連する問題