问题:intentPlayer.getSingerOrigin() 为空,显示不了歌手信息。代码: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:有的歌手信息不为空,有的为空,这个是固定的。在此贴的是为空的。

解决方案 »

  1.   

    System.out.println(intentPlayer.getSingerOrigin()+" +++++++++++++");
    你显示的并不是 getSingerName() 而是 getSingerOrigin() 吧另外就是,Debug跟踪下这个get方法里面是怎么回事。
      

  2.   

    你说的对,是我复制的时候复制错了。
    get方法里是这样的:private String singerOrigin;

    public String getSingerOrigin() {
    return singerOrigin;
    }
    public void setSingerOrigin(String singerOrigin) {
    this.singerOrigin = singerOrigin;
    这不会有错吧新手啊,求指点 
      

  3.   

    看起来是很正常。别急,再研究下这个值对象的 toString 方法。看看toString中是怎么输出 singerName 这个字符串的。
      

  4.   

    @Override
    public String toString() {
    return "Player [id=" + id + ", songName=" + songName + ", singerName="
    + singerName + ", songUri=" + songUri + ", totalTime="
    + totalTime + ", albumName=" + albumName + ", lrcId=" + lrcId
    + ", albumCount=" + albumCount + ", singerCount=" + singerCount
    + "]";
    }
    这个是自动生成的,
      

  5.   

    你前面贴的是: getSingerOrigin(),取得属性是 private String singerOrigin;而toString()函数中,并没有输出过 singerOrigin;而是输出的:singerName 这个属性,所以应该确定跟 singerOrigin 没有任何关系。所以,建议你程序里面是不是改成 getSingerName()?
      

  6.   

    照你说的我把getSingerOrigin()改成getSingerName(),但是问题还是和之前一样,原本就显示歌手信息的歌手还显示,原本不显示的还是不显示。代码: 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.getSingerName()!=null){
    artistOrigin.setText(intentPlayer.getSingerOrigin());
    }else{
    artistOrigin.setText("���������Ϣ");

    }
    log:07-21 02:18:42.496: I/System.out(7788): 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 02:18:42.511: I/System.out(7788): null +++++++++++++
      

  7.   

    这种错误,楼主调试就能找到了,碰到问题不用急着问,自己调一调就出来了。
    看set方法是否set进了正确的值,然后get方法,是否取了正确的值。
      

  8.   

    不是这个意思,我的意思其实是:歌手的名字应该就是 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("没有");
      }
      

  9.   

    我可能发现问题在那了,不显示歌手信息的没有用set传入信息,这是为什么呢?
    代码:public String getSingerOrigin() {
    System.out.println("getSingerOrigin ----->" + singerOrigin);
    return singerOrigin;
    }
    public void setSingerOrigin(String singerOrigin) {
    System.out.println("setSingerOrigin ----->" + singerOrigin);
    this.singerOrigin = singerOrigin;log:
    07-21 02:54:45.611: I/System.out(8830): 11
    07-21 02:54:45.621: I/System.out(8830): 1342827867800
    07-21 02:54:45.621: I/System.out(8830): 000000000000000
    07-21 02:54:45.642: I/System.out(8830): 1.0
    07-21 02:57:08.681: I/System.out(8830): intentPlayer------>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 02:57:09.821: I/System.out(8830): intentPlayer+Name----->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 02:57:09.871: I/System.out(8830): intentPlayer + geshou------>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 02:57:09.901: I/System.out(8830): 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 02:57:09.962: I/System.out(8830): 许志安 +++++++SingerName++++++
    07-21 02:57:09.962: I/System.out(8830): getSingerOrigin ----->null
    07-21 02:57:09.962: I/System.out(8830): null +++++++SingerOrigin++++++
    07-21 02:57:09.982: I/System.out(8830): getSingerOrigin ----->null
    07-21 02:57:17.002: I/System.out(8830): 3
    07-21 02:57:17.022: I/System.out(8830): 4
    07-21 02:57:17.063: I/System.out(8830):  Lyric file sdcard/xiuman/lyric
    07-21 02:57:46.901: I/System.out(8830): setSingerOrigin ----->Daniel powter丹尼尔·波特(1971年2月25日-),亦作丹尼尔·帕德,加拿大唱作音乐人。
    07-21 02:57:47.641: I/System.out(8830): intentPlayer------>Player [id=7175, songName=If Only I Could Cry, singerName=Daniel Powter, songUri=http://110.81.238.163:8080/music\source\danielpowter-ifonlyicouldcry.mp3, totalTime=0, albumName=null, lrcId=null, albumCount=null, singerCount=0]
    07-21 02:57:47.762: I/System.out(8830): intentPlayer + geshou------>Player [id=7175, songName=If Only I Could Cry, singerName=Daniel Powter, songUri=http://110.81.238.163:8080/music\source\danielpowter-ifonlyicouldcry.mp3, totalTime=0, albumName=null, lrcId=null, albumCount=null, singerCount=0]
    07-21 02:57:47.771: I/System.out(8830): intentPlayer+Name----->Player [id=7175, songName=If Only I Could Cry, singerName=Daniel Powter, songUri=http://110.81.238.163:8080/music\source\danielpowter-ifonlyicouldcry.mp3, totalTime=0, albumName=null, lrcId=null, albumCount=null, singerCount=0]
    07-21 02:57:47.791: I/System.out(8830): intentPlayer + xinxi------->Player [id=7175, songName=If Only I Could Cry, singerName=Daniel Powter, songUri=http://110.81.238.163:8080/music\source\danielpowter-ifonlyicouldcry.mp3, totalTime=0, albumName=null, lrcId=null, albumCount=null, singerCount=0]
    07-21 02:57:47.823: I/System.out(8830): Daniel Powter +++++++SingerName++++++
    07-21 02:57:47.823: I/System.out(8830): getSingerOrigin ----->Daniel powter丹尼尔·波特(1971年2月25日-),亦作丹尼尔·帕德,加拿大唱作音乐人。
    07-21 02:57:47.823: I/System.out(8830): Daniel powter丹尼尔·波特(1971年2月25日-),亦作丹尼尔·帕德,加拿大唱作音乐人。 +++++++SingerOrigin++++++
    07-21 02:57:47.823: I/System.out(8830): getSingerOrigin ----->Daniel powter丹尼尔·波特(1971年2月25日-),亦作丹尼尔·帕德,加拿大唱作音乐人。
    07-21 02:57:47.823: I/System.out(8830): getSingerOrigin ----->Daniel powter丹尼尔·波特(1971年2月25日-),亦作丹尼尔·帕德,加拿大唱作音乐人。
    07-21 02:57:53.062: I/System.out(8830): 3
    07-21 02:57:53.072: I/System.out(8830): 4
    07-21 02:57:53.072: I/System.out(8830):  Lyric file sdcard/xiuman/lyric上面第一个是不显示歌手信息的,第二个是显示歌手信息的。 怎么会有的set传入,有的不传入呢?
      

  10.   

    那要看之前是怎么构造的 intentPlayer 这个值对象了。一般来说,最大可能就是:原来的mp3文件中就没有保存这个信息,所以程序也取不到,那么自然就不会去做set操作。类似与数据库某个行记录的某字段值本来就是null,你查询出来的结果集里面,值对象的属性也就自然没有。
      

  11.   

    恩,我也是这么想的,intentPlayer  这个值对象我昨晚就打印出来了,你看下
    1、07-20 23:44:50.351: I/System.out(3790): intentPlayer------>Player [id=6865, songName=Settle Down, singerName=No Doubt, songUri=http://110.81.238.163:8080/music\source\nodoubt-settledown.mp3, totalTime=0, albumName=null, lrcId=null, albumCount=null, singerCount=0]2、07-20 23:46:13.092: I/System.out(3790): intentPlayer------>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]第一个是可以显示歌手信息的intentPlayer值对象,第二个是不能显示的。 我没看出来有区别啊
      

  12.   

    如果你注意的话,是因为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
    + "]";
    }然后再观察就知道了。
      

  13.   

    这个我也试了,还是不行,和上面一样set方法没有执行, 我是用eclipse自动生成的toSring的, 然后就和你的一样了,不知道为什么公司生成的会少一个,但是并不影响大部分歌手信息的显示。怪了?
      

  14.   

    toString只是负责显示下内容而已,无论是否显示,对set和get都不影响。我估计是不是SingerOrigin这个属性是后来才加入的,Eclipse可不会智能的根据属性变化来修改toString()
      

  15.   

    那这个set方法不执行 一般原因是什么呢?package com.bxdm.xiuman.entity;import java.io.Serializable;
    /**
     * 
     * @author Xuchunhui ����ʵ����
     *
     */public class Player implements Serializable{
    private String id;
    private String songName;
    private String singerName;
    private String songUri;
    private long totalTime;
    private String albumName;
    private Integer lrcId;
    private String albumCount;
    private int singerCount;
    private String title;
    private String albumId;
    private String  imageUrl;
    //���
    private String  songlrc;
    //���ֽ���
    private String singerOrigin;









    public String getSingerOrigin() {
    System.out.println("getSingerOrigin ----->" + singerOrigin);
    return singerOrigin;
    }
    public void setSingerOrigin(String singerOrigin) {
    System.out.println("setSingerOrigin ----->" + singerOrigin);
    this.singerOrigin = singerOrigin;

    }
    public String getSonglrc() {
    return songlrc;
    }
    public void setSonglrc(String songlrc) {
    this.songlrc = songlrc;
    }
    public String getImageUrl() {
    return imageUrl;
    }
    public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
    }
    public String getAlbumId() {
    return albumId;
    }
    public void setAlbumId(String albumId) {
    this.albumId = albumId;
    }
    public String getTitle() {
    return title;
    }
    public void setTitle(String title) {
    this.title = title;
    }
    public String getId() {
    return id;
    }
    public void setId(String id) {
    this.id = id;
    }
    public String getSongName() {
    return songName;
    }
    public void setSongName(String songName) {
    this.songName = songName;
    }
    public String getSingerName() {
    return singerName;
    }
    public void setSingerName(String singerName) {
    this.singerName = singerName;
    }
    public String getSongUri() {
    return songUri;
    }
    public void setSongUri(String songUri) {
    this.songUri = songUri;
    }
    public long getTotalTime() {
    return totalTime;
    }
    public void setTotalTime(long totalTime) {
    this.totalTime = totalTime;
    }
    public String getAlbumName() {
    return albumName;
    }
    public void setAlbumName(String albumName) {
    this.albumName = albumName;
    }
    public Integer getLrcId() {
    return lrcId;
    }
    public void setLrcId(Integer lrcId) {
    this.lrcId = lrcId;
    }
    public String getAlbumCount() {
    return albumCount;
    }
    public void setAlbumCount(String albumCount) {
    this.albumCount = albumCount;
    }
    public int getSingerCount() {
    return singerCount;
    }
    public void setSingerCount(int singerCount) {
    this.singerCount = singerCount;
    }


    @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
    + "]";
    }


    }
      

  16.   

    原因就是负责创建该值对象的程序没有调用这个set方法咯。根本原因一般来说就是 MP3 文件里面就没记录这个信息。
      

  17.   

    不能随意下定论,最好能去找找看是不是真的那条记录里面,这个信息就是null的。