2017-06-21 26 views
-1

我無法從另一個類訪問getsongList()方法。 我想從「Songs」類中訪問MainActivity類中的方法。我嘗試了下面的代碼,但我得到一個錯誤。請檢查我的代碼是否正確。從另一個類獲取錯誤方法

幫我修復代碼。

歌曲類

public class Songs extends Fragment { 
    private ArrayList<SongModel> songList; 
    public void getsongList(){ 
     //retrieve song info 
    ContentResolver musicResolver = getActivity().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 SongModel(thisId, thisTitle, thisArtist)); 
     } 
     while (musicCursor.moveToNext()); 
    } 
    } 
} 

MainActivity類別

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     Songs obj1 = new Songs(); 
     song = obj1.getsongList(); 
    } 
} 
+0

請嘗試使該方法爲靜態? – dustblue

+0

Make func static –

+0

你正在得到什麼錯誤? –

回答

0

方法getsongList()返回void。爲了訪問像

歌曲= obj1.getsongList();你應該從虛空修改方法簽名來ArrayList和該方法

public void getsongList() 

to 

public ArrayList<SongModel> getsongList() { 
return songList; 
} 
+0

感謝它的工作。但是現在我在運行應用程序時遇到了另一個錯誤。錯誤 - 嘗試在此行的空對象引用上調用虛擬方法------- ContentResolver musicResolver = getActivity()。getContentResolver(); –

0

只是嘗試這一次更改方法的返回類型爲void你arraylit

private songList; 
public ArrayList<SongModel> getsongList(){ 
return song;} 

個MainActivity類別

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Songs obj1 = new Songs(); 
    ArrayList<SongModel> song = obj1.getsongList(); 
} 

}

0

您應該創建一個返回一個列表的方法返回的SongList,記得要經常programming to interface

private List<SongModel> songList; 

public List<SongModel> getsongList() { 
    return songList; 
} 

但有一個缺陷在下面一行:

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    Songs obj1 = new Songs(); 

    // You can't call it here!!!! 
    song = obj1.getsongList(); 
    } 
} 

因爲歌曲是一個片段(你也應該查它的名字是SongsFragment),它需要時間來初始化和創建它自己。因此,您需要添加Callback,告知MainActivity碎片完成創建時。

請閱讀Communicating with Other Fragments