日期:2014-05-20  浏览次数:20845 次

公司的mp3项目,来看下!
问题:intentPlayer.getSingerOrigin() 为空,显示不了歌手信息。

代码:

Java code


TextView artistOrigin=(TextView) view.findViewById(R.id.play_infodetail_textView);
             if(intentPlayer!=null){
                 System.out.println("intentPlayer + xinxi------->" + intentPlayer);
                 System.out.println(intentPlayer.getSingerOrigin()+" +++++++++++++");
                    if (intentPlayer.getSingerName() != null) {
                        artistText.setText(intentPlayer.getSingerName());
                    }
                    if(intentPlayer.getSingerOrigin()!=null){
                        artistOrigin.setText(intentPlayer.getSingerOrigin());
                    }else{
                        artistOrigin.setText("??????????");
                        
                    }
             }
            return view;



我打印了一下intentPlayer是有值的,但是intentPlayer.getSingerName() 就是空值了,getSingerName()这是一个实体类中的方法,按说不会出错啊,这是为什么呢?

log:

07-21 00:08:24.891: I/System.out(4523): intentPlayer + xinxi------->Player [id=7002, songName=睡火山, singerName=许志安, songUri=http://110.81.238.163:8080/music\source\xuzhian-shuihuoshan.mp3, totalTime=0, albumName=null, lrcId=null, albumCount=null, singerCount=0]
07-21 00:08:24.911: I/System.out(4523): null +++++++++++++
07-21 00:08:24.931: I/sessionid(4523): 22[]
07-21 00:08:25.641: D/dalvikvm(4523): GC_FOR_MALLOC freed 10889 objects / 476144 bytes in 409ms
07-21 00:08:25.721: D/skia(4523): --- decoder->decode returned false
07-21 00:08:25.721: W/System.err(4523): java.lang.NullPointerException
07-21 00:08:25.721: W/System.err(4523): at com.bxdm.xiuman.util.ImageLoader.loadImageFromUrl(ImageLoader.java:51)
07-21 00:08:25.721: W/System.err(4523): at com.bxdm.xiuman.util.ImageLoader$LoadImage.run(ImageLoader.java:72)

PS:有的歌手信息不为空,有的为空,这个是固定的。在此贴的是为空的。

------解决方案--------------------
System.out.println(intentPlayer.getSingerOrigin()+" +++++++++++++");
你显示的并不是 getSingerName() 而是 getSingerOrigin() 吧。。。

另外就是,Debug跟踪下这个get方法里面是怎么回事。
------解决方案--------------------
看起来是很正常。别急,再研究下这个值对象的 toString 方法。

看看toString中是怎么输出 singerName 这个字符串的。
------解决方案--------------------
你前面贴的是: getSingerOrigin(),取得属性是 private String singerOrigin;

而toString()函数中,并没有输出过 singerOrigin;

而是输出的:singerName 这个属性,所以应该确定跟 singerOrigin 没有任何关系。



所以,建议你程序里面是不是改成 getSingerName()?
------解决方案--------------------
这种错误,楼主调试就能找到了,碰到问题不用急着问,自己调一调就出来了。
看set方法是否set进了正确的值,然后get方法,是否取了正确的值。
------解决方案--------------------
不是这个意思,我的意思其实是:歌手的名字应该就是 getSingerName(),而 getSingerOrigin() 究竟是啥我并不清楚(从名字上来看似乎是 歌手所在地)。程序应该是:


if(intentPlayer!=null){
System.out.println("intentPlayer + xinxi------->" + intentPlayer);
System.out.println(intentPlayer.getSingerName()+" +++++++SingerName++++++");
if (intentPlayer.getSingerName() != null) {
artistText.setText(intentPlayer.getSingerName());
}

System.out.println(intentPlayer.getSingerOrigin()+" +++++++SingerOrigin++++++");
if(intentPlayer.getSingerOrigin()!=null){
artistOrigin.setText(intentPlayer.getSingerOrigin());
}else{
artistOrigin.setText("没有");
}

------解决方案--------------------
那要看之前是怎么构造的 intentPlayer 这个值对象了。

一般来说,最大可能就是:原来的mp3文件中就没有保存这个信息,所以程序也取不到,那么自然就不会去做set操作。