2017-07-05 10 views
1

私はAndroidアプリを開発する方法を勉強しようとしています。単純な音楽プレーヤーを作成しようとしていたウェブ上で見つけた非常に便利なチュートリアルが見つかりました。Androidのデバイスからすべての曲を取得することができません

私はそれに続きましたが、私は問題があります: 私は、アプリケーションを実行しようとすると、私はコンパイラでエラーが発生しないエミュレータでは、アプリケーションが次のエラーで起動しませんメッセージ:「残念ながら、MusicPlayerは停止しました。任意

Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 

これはコードである:私は次のコマンドを呼び出すときにコードをビットを確認した後

public class MainActivity extends AppCompatActivity { 
private ArrayList<Song> songList; 
private ListView songView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    songView = (ListView) findViewById(R.id.song_list); 
    songList = new ArrayList<Song>(); 
    getSongList(); 
} 

public void getSongList(){ 
    // retrieve song info 
    ContentResolver musicResolver = getContentResolver(); 
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 
    if(musicCursor!=null && musicCursor.moveToFirst()){ 
     //get columns 

     int titleColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media.TITLE); 
     int idColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media._ID); 
     int artistColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media.ARTIST); 
     //add songs to list 
     do { 
      long thisId = musicCursor.getLong(idColumn); 
      String thisTitle = musicCursor.getString(titleColumn); 
      String thisArtist = musicCursor.getString(artistColumn); 
      songList.add(new Song(thisId, thisTitle, thisArtist)); 
     } 
     while (musicCursor.moveToNext()); 
    } 
} 

}

、私はアプリケーションがクラッシュしたことが判明しました何が問題なのか? https://developer.android.com/guide/topics/providers/content-provider-basics.html

あなたはあなたがより多くの引数に渡す必要があります:私は本当にそれ

+0

外部記憶装置がエミュレータに存在しない可能性があります。また、あなたはエミュレーターに見つけるためにいくつかの音楽を入れていますか? –

+0

@gymnif私は、問題が、 'query()'関数で選択する列を提供しないことに関連していると思っていましたが、私はそれを純粋にドキュメントに基づいていますが、私はAndroidに慣れていません。これらの 'null'変数はすべてクエリ文でOKですか? – dckuehn

+0

私は自分のプロジェクトにこのような方法を使ったことはありません。私は再帰関数を使用してデバイスのメモリをスキャンし、正常に動作しました –

答えて

0

がここにドキュメントを見て見つけることができません。 2番目のパラメータは列名の文字列配列でなければならず、それがなければどのデータも選択できないようです。

ドキュメントからの抜粋:

// Queries the user dictionary and returns results 
mCursor = getContentResolver().query(
    UserDictionary.Words.CONTENT_URI, // The content URI of the words table 
    mProjection,      // The columns to return for each row 
    mSelectionClause     // Selection criteria 
    mSelectionArgs,      // Selection criteria 
    mSortOrder);      // The sort order for the returned rows 
0

あなたは、外部記憶装置の読み取り権限を付与されたことがありますか?

関連する問題