公司的mp3项目,来看下!问题:intentPlayer.getSingerOrigin() 为空,显示不了歌手信息。代码:Java codeTextVi
公司的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操作。
类似与数据库某个行记录的某字段值本来就是null,你查询出来的结果集里面,值对象的属性也就自然没有。
[解决办法]
如果你注意的话,是因为toString()函数根本就没有管SingerOrigin,所以就看不出来。
你修改下toString()函数:
@Override
public String toString() {
return "Player [id=" + id + ", songName=" + songName + ", singerName="
+ singerName + ", SingerOrigin=" + singerOrigin+ ", songUri=" + songUri + ", totalTime="
+ totalTime + ", albumName=" + albumName + ", lrcId=" + lrcId
+ ", albumCount=" + albumCount + ", singerCount=" + singerCount
+ "]";
}
然后再观察就知道了。
[解决办法]
toString只是负责显示下内容而已,无论是否显示,对set和get都不影响。
我估计是不是SingerOrigin这个属性是后来才加入的,Eclipse可不会智能的根据属性变化来修改toString()
[解决办法]
原因就是负责创建该值对象的程序没有调用这个set方法咯。
根本原因一般来说就是 MP3 文件里面就没记录这个信息。
[解决办法]
不能随意下定论,最好能去找找看是不是真的那条记录里面,这个信息就是null的。
