Android 是否可以通过此方法从另一个类获取ArrayList?

Android 是否可以通过此方法从另一个类获取ArrayList?,android,arraylist,Android,Arraylist,我正在创建一个小型音乐播放器应用程序。我有两个班,分别是“Tab3Tracks”和“NowPlaying”。我在“Tab3Tracks”类中创建了一个ArrayList。现在,我想访问arraylist,它在“NowPlaying”类中加载了歌曲。检查我的代码是否有错误。访问ArrayList时出错 选项卡3跟踪类 public class Tab3Tracks extends ListFragment { public void onCreate(Bundle savedInstanceSt

我正在创建一个小型音乐播放器应用程序。我有两个班,分别是“Tab3Tracks”和“NowPlaying”。我在“Tab3Tracks”类中创建了一个ArrayList。现在,我想访问arraylist,它在“NowPlaying”类中加载了歌曲。检查我的代码是否有错误。访问ArrayList时出错

选项卡3跟踪类

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();

 }
 }