公司的mp3项目,来看上

公司的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的。