Android 是否可以通过此方法从另一个类获取ArrayList?
我正在创建一个小型音乐播放器应用程序。我有两个班,分别是“Tab3Tracks”和“NowPlaying”。我在“Tab3Tracks”类中创建了一个ArrayList。现在,我想访问arraylist,它在“NowPlaying”类中加载了歌曲。检查我的代码是否有错误。访问ArrayList时出错 选项卡3跟踪类Android 是否可以通过此方法从另一个类获取ArrayList?,android,arraylist,Android,Arraylist,我正在创建一个小型音乐播放器应用程序。我有两个班,分别是“Tab3Tracks”和“NowPlaying”。我在“Tab3Tracks”类中创建了一个ArrayList。现在,我想访问arraylist,它在“NowPlaying”类中加载了歌曲。检查我的代码是否有错误。访问ArrayList时出错 选项卡3跟踪类 public class Tab3Tracks extends ListFragment { public void onCreate(Bundle savedInstanceSt
public class Tab3Tracks extends ListFragment {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
private ArrayList<String> trackslist = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab3tracks, container, false);
final String trackid = MediaStore.Audio.Media._ID;
final String trackno = MediaStore.Audio.Media.TRACK;
final String trackname = MediaStore.Audio.Media.TITLE;
final String path = MediaStore.Audio.Media.DATA;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = getContext().getContentResolver();
final String[] projection = {trackid,trackno,trackname,path
};
final Cursor cursor = cr.query(uri,projection,null,null,null);
if (cursor!=null){
if(cursor.moveToFirst()){
do{
int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}
} cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(),R.layout.playlist_item,R.id.songTitle,trackslist
);
setListAdapter(adapter);
return v;
}
public ArrayList<String> getList(){
return trackslist;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
int songIndex = position;
// Starting new intent
Intent in = new Intent(getActivity(), NowPlaying.class);
// Sending songIndex to PlayerActivity
in.putExtra("songIndex", songIndex);
getActivity().setResult(100, in);
getActivity().finish();
startActivity(in);
}
}
public class NowPlaying extends AppCompatActivity{
public ArrayList<String> songsList = new ArrayList<String>();
public Tab3Tracks songs1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
// Getting all songs list
songsList= songs1.getList();
}
}
您以错误的方式调用方法getlist()。您可以通过两种方法获得: 1)在所需的类中创建类(tab3track)的实例,然后调用方法getlist() 2)使该方法成为静态的,然后从另一个类调用它,而不使该类(tab3track)(包含方法getlist())成为实例 您所问的错误是您没有使getlist()成为静态的,并且您正在统计地调用它 第一个解决方案-- tab3跟踪类-:
公共类Tab3Tracks扩展ListFragment{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
public ArrayList trackslist=新的ArrayList();
公共选项卡3tracks(){}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.Tab3支架,容器,假);
最终字符串trackid=MediaStore.Audio.Media.\u ID;
最终字符串trackno=MediaStore.Audio.Media.TRACK;
最终字符串trackname=MediaStore.Audio.Media.TITLE;
最终字符串路径=MediaStore.Audio.Media.DATA;
Uri Uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
ContentResolver cr=getContext().getContentResolver();
最终字符串[]投影={trackid,trackno,trackname,path
};
最终游标=cr.query(uri、投影、null、null、null);
如果(光标!=null){
if(cursor.moveToFirst()){
做{
int trackIndex=cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}
}cursor.close();
ArrayAdapter适配器=新的ArrayAdapter(
getActivity(),R.layout.playlist_项,R.id.songTitle,trackslist
);
setListAdapter(适配器);
返回v;
}
公共ArrayList getList(){
返回轨道列表;
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
super.onListItemClick(左、右、位置、id);
指数=位置;
//开始新的意图
Intent in=newintent(getActivity(),NowPlaying.class);
//正在向PlayerActivity发送歌曲索引
in.putExtra(“歌曲索引”,songIndex);
getActivity().setResult(100,英寸);
getActivity().finish();
星触觉(in);
}
}
正在上课:
public类NowPlaying扩展了appcompative活动{
public ArrayList songsList=new ArrayList();
公共选项卡3和选项卡3;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
//获取所有歌曲列表
tab3=新的tab3track();
songsList=tab3.getList();
}
}
第二种解决方案:
选项卡3跟踪类:
公共类Tab3Tracks扩展ListFragment{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
public ArrayList trackslist=新的ArrayList();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.Tab3支架,容器,假);
最终字符串trackid=MediaStore.Audio.Media.\u ID;
最终字符串trackno=MediaStore.Audio.Media.TRACK;
最终字符串trackname=MediaStore.Audio.Media.TITLE;
最终字符串路径=MediaStore.Audio.Media.DATA;
Uri Uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
ContentResolver cr=getContext().getContentResolver();
最终字符串[]投影={trackid,trackno,trackname,path
};
最终游标=cr.query(uri、投影、null、null、null);
如果(光标!=null){
if(cursor.moveToFirst()){
做{
int trackIndex=cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}
}cursor.close();
ArrayAdapter适配器=新的ArrayAdapter(
getActivity(),R.layout.playlist_项,R.id.songTitle,trackslist
);
setListAdapter(适配器);
返回v;
}
公共静态ArrayList getList(){
返回轨道列表;
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
super.onListItemClick(左、右、位置、id);
指数=位置;
//开始新的意图
Intent in=newintent(getActivity(),NowPlaying.class);
//正在向PlayerActivity发送歌曲索引
in.putExtra(“歌曲索引”,songIndex);
getActivity().setResult(100,英寸);
getActivity().finish();
星触觉(in);
}
正在上课:
public类NowPlaying扩展了appcompative活动{
public ArrayList songsList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
//获取所有歌曲列表
songsList=Tab3Tracks.getList();
}
}
您以错误的方式调用了方法getlist()。您可以从两个方法获得此结果:
1)在所需的类中创建类(tab3track)的实例,然后调用方法getlist()
2)使该方法成为静态的,然后从另一个类调用它,而不使该类(tab3track)(包含方法getlist())成为实例
您询问的错误是,您没有将getlist()设置为stat
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList com.digital.thefearstuff.tfsmusicplayer.Tab3Tracks.getList()' on a null object reference
Tab3tracks tab3 = new Tab3Tracks(); songslist = tab3.getlist();
Tab3tracks.getlist();
public class Tab3Tracks extends ListFragment {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
public ArrayList<String> trackslist = new ArrayList<>();
public Tab3Tracks(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab3tracks, container, false);
final String trackid = MediaStore.Audio.Media._ID;
final String trackno = MediaStore.Audio.Media.TRACK;
final String trackname = MediaStore.Audio.Media.TITLE;
final String path = MediaStore.Audio.Media.DATA;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = getContext().getContentResolver();
final String[] projection = {trackid,trackno,trackname,path
};
final Cursor cursor = cr.query(uri,projection,null,null,null);
if (cursor!=null){
if(cursor.moveToFirst()){
do{
int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}
} cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(),R.layout.playlist_item,R.id.songTitle,trackslist
);
setListAdapter(adapter);
return v;
}
public ArrayList<String> getList(){
return trackslist;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
int songIndex = position;
// Starting new intent
Intent in = new Intent(getActivity(), NowPlaying.class);
// Sending songIndex to PlayerActivity
in.putExtra("songIndex", songIndex);
getActivity().setResult(100, in);
getActivity().finish();
startActivity(in);
}
}
public class NowPlaying extends AppCompatActivity{
public ArrayList<String> songsList = new ArrayList<String>();
public Tab3Tracks tab3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
// Getting all songs list
tab3 = new Tab3Tracks();
songsList= tab3.getList();
}
}
public class Tab3Tracks extends ListFragment {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
public ArrayList<String> trackslist = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab3tracks, container, false);
final String trackid = MediaStore.Audio.Media._ID;
final String trackno = MediaStore.Audio.Media.TRACK;
final String trackname = MediaStore.Audio.Media.TITLE;
final String path = MediaStore.Audio.Media.DATA;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = getContext().getContentResolver();
final String[] projection = {trackid,trackno,trackname,path
};
final Cursor cursor = cr.query(uri,projection,null,null,null);
if (cursor!=null){
if(cursor.moveToFirst()){
do{
int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}
} cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(),R.layout.playlist_item,R.id.songTitle,trackslist
);
setListAdapter(adapter);
return v;
}
public static ArrayList<String> getList(){
return trackslist;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
int songIndex = position;
// Starting new intent
Intent in = new Intent(getActivity(), NowPlaying.class);
// Sending songIndex to PlayerActivity
in.putExtra("songIndex", songIndex);
getActivity().setResult(100, in);
getActivity().finish();
startActivity(in);
}
public class NowPlaying extends AppCompatActivity{
public ArrayList<String> songsList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
// Getting all songs list
songsList= Tab3Tracks.getList();
}
}