安卓开发中,我在Spinner的onItemSelected函数里访问全局变量程序就会CrashHandler闪退

小白在做一个android音乐播放器,想设置一个下拉列表来选择歌曲的播放顺序,分随机播放、按时间顺序播放和按热度播放,但是我在使用Spinner的onItemSelected函数时,在里面调用一下全局的歌曲List就会出现CrashHandler然后闪退,而且不用排序只是想打印一下list信息就会闪退,CrashHandler后面的参数不懂是什么东西,希望大佬们指点一下,下面附上代码和报错信息:

public void setSpinner(){
        List<String> list = new ArrayList<String>();
        list.add("随机播放");
        list.add("播放最新");
        list.add("播放最热");
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
            public void onItemSelected(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) {
                // TODO Auto-generated method stub
                arg0.setVisibility(View.VISIBLE);
                Log.i("adapter","您选择的是:"+adapter.getItem(arg2));
                                //以按热度排序为例
                Collections.sort(musicList, new Comparator<Music>() {
                    @Override
                    public int compare(Music o1, Music o2){
                        int diff = o1.getFansnum() - o2.getFansnum();
                        if(diff >0) {
                            return 1;
                        }else if(diff < 0){
                            return -1;
                        }
                        return 0;
                    }
                });
                for(int i=0;i<musicList.size();i++){
                    Log.i("smile", "排序成功~"+musicList.get(i).getObjectId()+"lizi:"+musicList.get(i).getName());
                }
            }
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                arg0.setVisibility(View.VISIBLE);
            }
        });
}

其中musicList是一个全局变量,我用传参传进函数也不行,难道是因为我的歌曲正在播放?
报错信息:
D/AndroidRuntime: Shutting down VM
D/CrashHandler: BOARD : unknown
BOOTLOADER : unknown
BRAND : google
CPU_ABI : x86
CPU_ABI2 :
DEVICE : generic_x86
DISPLAY : sdk_google_phone_x86-userdebug 7.0 NYC 4662066 dev-keys
FINGERPRINT : google/sdk_google_phone_x86/generic_x86:7.0/NYC/4662066:userdebug/dev-keys
HARDWARE : ranchu
D/CrashHandler: HOST : abfarm646
ID : NYC
IS_DEBUGGABLE : true
IS_EMULATOR : true
MANUFACTURER : Google
MODEL : Android SDK built for x86
PERMISSIONS_REVIEW_REQUIRED : false
PRODUCT : sdk_google_phone_x86
RADIO : unknown
SERIAL : unknown
SUPPORTED_32_BIT_ABIS : [Ljava.lang.String;@970f945
SUPPORTED_64_BIT_ABIS : [Ljava.lang.String;@16b589a
SUPPORTED_ABIS : [Ljava.lang.String;@cfd5cb
TAG : Build
TAGS : dev-keys
TIME : 1521319005000
TYPE : userdebug
UNKNOWN : unknown
USER : android-build

1个回答

在java里面其实是不应该有全局变量这个说发的(一切皆对象跟全局变量冲突啦)

题主在匿名内部类中调用,所谓的全局变量【musicList】肯定是有问题的,,

试试把这个所谓的全局变量换成【某个类的静态属性】(java中静态成员属性是可以当做所谓的全局变量使用的)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐