2016-03-02 44 views
0

所以我無法找到我的代碼在哪裏出錯了。我正在建立一個音頻播放器。該功能找不到我設備中的所有音頻文件,除了其中的2個。我想這個問題可能在我的歌曲定位算法findSongs中。無法找到所有的音頻文件存儲在列表視圖

這是我的日誌貓:

03-17 15:29:24.492 20066-20066/? I/SELinux﹕ Function: selinux_android_load_priority , priority [3] , priority version is VE=SEPF_SGH-M919_4.4.4_0048 
03-17 15:29:24.492 20066-20066/? E/dalvikvm﹕ >>>>> Normal User 
03-17 15:29:24.492 20066-20066/? E/dalvikvm﹕ >>>>> com.example.joe.audiodomain [ userId:0 | appId:10237 ] 
03-17 15:29:24.492 20066-20066/? D/dalvikvm﹕ Late-enabling CheckJNI 
03-17 15:29:24.632 20066-20066/? W/dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;) 
03-17 15:29:24.632 20066-20066/? I/dalvikvm﹕ Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested 
03-17 15:29:24.632 20066-20066/? W/dalvikvm﹕ VFY: unable to resolve interface method 15027: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z 
03-17 15:29:24.632 20066-20066/? D/dalvikvm﹕ VFY: replacing opcode 0x72 at 0x0002 
03-17 15:29:24.632 20066-20066/? I/dalvikvm﹕ Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode 
03-17 15:29:24.632 20066-20066/? W/dalvikvm﹕ VFY: unable to resolve interface method 15031: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode; 
03-17 15:29:24.632 20066-20066/? D/dalvikvm﹕ VFY: replacing opcode 0x72 at 0x0002 
03-17 15:29:24.702 20066-20066/? I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations 
03-17 15:29:24.702 20066-20066/? W/dalvikvm﹕ VFY: unable to resolve virtual method 396: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
03-17 15:29:24.702 20066-20066/? D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
03-17 15:29:24.702 20066-20066/? I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType 
03-17 15:29:24.702 20066-20066/? W/dalvikvm﹕ VFY: unable to resolve virtual method 418: Landroid/content/res/TypedArray;.getType (I)I 
03-17 15:29:24.702 20066-20066/? D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
03-17 15:29:24.712 20066-20066/? E/VdcInflateDelegate﹕ Exception while inflating <vector> 
    org.xmlpull.v1.XmlPullParserException: Binary XML file line #17<vector> tag requires viewportWidth > 0 
      at android.support.graphics.drawable.VectorDrawableCompat.updateStateFromTypedArray(VectorDrawableCompat.java:535) 
      at android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:472) 
      at android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:436) 
      at android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:829) 
      at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:303) 
      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:178) 
      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173) 
      at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60) 
      at android.support.v7.widget.Toolbar.<init>(Toolbar.java:254) 
      at android.support.v7.widget.Toolbar.<init>(Toolbar.java:196) 
      at java.lang.reflect.Constructor.constructNative(Native Method) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
      at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379) 
      at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264) 
      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129) 
      at com.example.joe.audiodomain.MainActivity.onCreate(MainActivity.java:25) 
      at android.app.Activity.performCreate(Activity.java:5585) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
      at android.app.ActivityThread.access$900(ActivityThread.java:170) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5635) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
      at dalvik.system.NativeStart.main(Native Method) 
03-17 15:29:24.712 20066-20066/? D/AndroidRuntime﹕ Shutting down VM 
03-17 15:29:24.712 20066-20066/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41845da0) 
03-17 15:29:24.712 20066-20066/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.joe.audiodomain, PID: 20066 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.joe.audiodomain/com.example.joe.audiodomain.MainActivity}: android.view.InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.Toolbar 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
      at android.app.ActivityThread.access$900(ActivityThread.java:170) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5635) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.Toolbar 
      at android.view.LayoutInflater.createView(LayoutInflater.java:626) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
      at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379) 
      at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264) 
      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129) 
      at com.example.joe.audiodomain.MainActivity.onCreate(MainActivity.java:25) 
      at android.app.Activity.performCreate(Activity.java:5585) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
            at android.app.ActivityThread.access$900(ActivityThread.java:170) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5635) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.reflect.InvocationTargetException 
      at java.lang.reflect.Constructor.constructNative(Native Method) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
            at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379) 
            at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300) 
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264) 
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129) 
            at com.example.joe.audiodomain.MainActivity.onCreate(MainActivity.java:25) 
            at android.app.Activity.performCreate(Activity.java:5585) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
            at android.app.ActivityThread.access$900(ActivityThread.java:170) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5635) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v19/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020016 
      at android.content.res.Resources.loadDrawable(Resources.java:3439) 
      at android.content.res.Resources.getDrawable(Resources.java:1893) 
      at android.support.v7.widget.TintResources.superGetDrawable(TintResources.java:48) 
      at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:374) 
      at android.support.v7.widget.TintResources.getDrawable(TintResources.java:44) 
      at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323) 
      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:180) 
      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173) 
      at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60) 
      at android.support.v7.widget.Toolbar.<init>(Toolbar.java:254) 
      at android.support.v7.widget.Toolbar.<init>(Toolbar.java:196) 
            at java.lang.reflect.Constructor.constructNative(Native Method) 
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
            at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
            at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379) 
            at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300) 
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264) 
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129) 
            at com.example.joe.audiodomain.MainActivity.onCreate(MainActivity.java:25) 
            at android.app.Activity.performCreate(Activity.java:5585) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
            at android.app.ActivityThread.access$900(ActivityThread.java:170) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5635) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector 
      at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:986) 
      at android.graphics.drawable.Drawable.createFromXml(Drawable.java:930) 
      at android.content.res.Resources.loadDrawable(Resources.java:3435) 
            at android.content.res.Resources.getDrawable(Resources.java:1893) 
            at android.support.v7.widget.TintResources.superGetDrawable(TintResources.java:48) 
            at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:374) 
            at android.support.v7.widget.TintResources.getDrawable(TintResources.java:44) 
            at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323) 
            at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:180) 
            at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173) 
            at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60) 
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:254) 
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:196) 
            at java.lang.reflect.Constructor.constructNative(Native Method) 
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
            at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
            at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379) 
            at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300) 
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264) 
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129) 
            at com.example.joe.audiodomain.MainActivity.onCreate(MainActivity.java:25) 
            at android.app.Activity.performCreate(Activity.java:5585) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 
            at android.app.ActivityThread.access$900(ActivityThread.java:170) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5635) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
03-17 15:29:31.839 20066-20066/? I/Process﹕ Sending signal. PID: 20066 SIG: 9 

這裏是我的代碼: `

package com.example.joe.mp3demo; 

import android.app.Activity; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Adapter; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class ListActivity extends Activity { 
    ListView lv; 
    ArrayAdapter<String> adapter; 
    String songs[]; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list); 
     //Creating a List view instance 
     lv= (ListView) findViewById(R.id.listView); 

     //Array list to hold all songs, using findSongs method passing the SD card directory 
     ArrayList<File> allSongs= findSongs(Environment.getExternalStorageDirectory()); 

     songs= new String[allSongs.size()]; 
     for(int c=0; c< allSongs.size(); c++){ 
      songs[c]=allSongs.get(c).getName().toString(); 
     } 
     adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, songs); 

     lv.setAdapter(adapter); 
    } 

    //function to find all songs in SD card. Storing them in a temp ArrayList and returning 
    public ArrayList<File> findSongs(File root){ 
     ArrayList<File> al= new ArrayList<File>(); 
     File[] files=root.listFiles(); 
     for(File singleFile: files){ 
      if(singleFile.isDirectory() && !singleFile.isHidden()) { 
       al.addAll(findSongs(singleFile)); 
      } 
      else{ 
       if(singleFile.getName().endsWith(".mp3") || singleFile.getName().endsWith(".wav") || singleFile.getName().endsWith(".wma")){ 
        al.add(singleFile); 
       } 
      } 
     } 

     return al; 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_list, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

是'endsWith'區分大小寫? –

+0

是的,我確定。 hmmmm –

+0

endsWith區分大小寫,但理論上它應該仍然抓取每個文件的末尾擴展名。 –

回答

4

試試這個代碼: -

public class FindMp3Files extends AppCompatActivity { 

    ListView mp3List; 

    String title, artist, path, displayName, songDuration; 
    ArrayList<Mp3Model> songs; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_find_mp3_files); 

     mp3List = (ListView) findViewById(R.id.mp3List); 
     songs = new ArrayList<>(); 

     scanSdcard(); 

     SongAdapter adapter = new SongAdapter(this, songs); 
     mp3List.setAdapter(adapter); 

    } 

    private void scanSdcard() { 
     String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 
     String[] projection = { 
       MediaStore.Audio.Media.TITLE, 
       MediaStore.Audio.Media.ARTIST, 
       MediaStore.Audio.Media.DATA, 
       MediaStore.Audio.Media.DISPLAY_NAME, 
       MediaStore.Audio.Media.DURATION 
     }; 
     final String sortOrder = MediaStore.Audio.AudioColumns.TITLE + " COLLATE LOCALIZED ASC"; 

     Cursor cursor = null; 
     try { 
      Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      cursor = this.getContentResolver().query(uri, projection, selection, null, sortOrder); 
      if (cursor != null) { 
       cursor.moveToFirst(); 

       while (!cursor.isAfterLast()) { 

        Mp3Model mp3Model = new Mp3Model(); 

        title = cursor.getString(0); 
        artist = cursor.getString(1); 
        path = cursor.getString(2); 
        displayName = cursor.getString(3); 
        songDuration = cursor.getString(4); 

        mp3Model.setTitle(title); 
        mp3Model.setArtist(artist); 
        mp3Model.setPath(path); 
        mp3Model.setDisplayName(displayName); 
        mp3Model.setSongDuration(songDuration); 

        songs.add(mp3Model); 

        cursor.moveToNext(); 
       } 
      } 

     } catch (Exception e) { 
      Log.e("Tag", e.toString()); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
    } 
} 

這裏是Mp3Model類: -

public class Mp3Model { 

    String title, artist, path, displayName, songDuration; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getArtist() { 
     return artist; 
    } 

    public void setArtist(String artist) { 
     this.artist = artist; 
    } 

    public String getPath() { 
     return path; 
    } 

    public void setPath(String path) { 
     this.path = path; 
    } 

    public String getDisplayName() { 
     return displayName; 
    } 

    public void setDisplayName(String displayName) { 
     this.displayName = displayName; 
    } 

    public String getSongDuration() { 
     return songDuration; 
    } 

    public void setSongDuration(String songDuration) { 
     this.songDuration = songDuration; 
    } 
} 

SongAdapter.java

public class SongAdapter extends BaseAdapter { 

Context context; 
ArrayList<Mp3Model> mp3Models; 
LayoutInflater inflater; 
Typeface captureFont; 

public SongAdapter(Context context, ArrayList<Mp3Model> mp3Models) { 
    this.context = context; 
    this.mp3Models = mp3Models; 
    inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    captureFont = Typeface.createFromAsset(this.context.getAssets(), "fonts/Montserrat.ttf"); 
} 

@Override 
public int getCount() { 
    return mp3Models.size(); 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public class ViewHolder { 
    TextView songName; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder vh; 
    if (convertView == null) { 
     vh = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.song_row, parent, false); 
     vh.songName = (TextView) convertView.findViewById(R.id.songName); 
     convertView.setTag(vh); 
    } else { 
     vh = (ViewHolder) convertView.getTag(); 
    } 
    vh.songName.setText(mp3Models.get(position).getTitle()); 
    vh.songName.setTypeface(captureFont); 
    vh.songName.setPadding(10, 10, 10, 10); 
    vh.songName.setTextColor(Color.WHITE); 
    vh.songName.setBackgroundColor(Color.parseColor("#333333")); 
    vh.songName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); 
    return convertView; 
} 
} 
+0

哇,你剛纔寫的是什麼? –

+0

是的,我做了;):) –

+0

該死的。我寫的代碼花了我幾個小時。那麼,你能看看我的代碼有什麼問題嗎?我不確定我完全理解使用MediaStore的東西,所以我就這麼做了。 –

相關問題