2014-01-12 147 views
0

我为我的音乐播放器应用程序制作了自定义的ArrayAdapter,当我尝试设置View的文本时,我的应用程序崩溃。我知道,从论坛上看,你不能从后台线程访问UI元素,或者在尝试这样的事情之前必须先设置ContentView(),但是我的情况有点不同。有任何想法吗?Android setText()崩溃

MusicAdapter.class

Context context; 
int layoutResourceId;  
Song data[] = null; 

private Handler threadHandler = new Handler(); 

public MusicAdapter(Context context, int layoutResourceId, Song[] data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    SongHolder holder = null; 

    if(row == null){ 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new SongHolder(); 
     holder.txtTitle = (TextView) row.findViewById(R.id.songName); 

     row.setTag(holder); 
    }else{ 
     holder = (SongHolder)row.getTag(); 
    } 

    Song song = data[position]; 

    holder.txtTitle.setText(song.title); //This line crashes 
    return row; 
} 


static class SongHolder{ 
    TextView txtTitle; 
} 

}

我的错误消息: 01-11 21:34:38.226:E/AndroidRuntime(32319):致命异常:主 01-11 21: 34/38.226:E/AndroidRuntime(32319):java.lang.NullPointerException 01-11 21:34:38.226:E/AndroidRuntime(32319):at com.example.audity.MusicAdapter $ SongHolder。(MusicAdapter.java:51 )

+0

什么错误信息,你得到有用的:)? – Tarik

+0

更新了错误 –

+1

给定的空指针异常,然后持有者或txtTitle或歌曲为空的问题。你应该尝试隔离每个这些以找出它是哪一个 –

回答

2

因为我看到你的代码你的崩溃m aybe为:

if(row == null){ 
    holder.txtTitle = (TextView) row.findViewById(R.id.songName); 
}else{ 
    //txtTitle not initialized here 
} 
holder.txtTitle.setText(song.title); 

txtTitle未初始化else块并使用下面的这

希望能