2013-11-18 4 views
-1

Я получаю проблему с ресурсом, не найденным в приложении, в котором я играю, идентификатор существует в представлении и используется правильный вид. Я удалил R-файл и восстановил его, но это не помогло. Он компилирует и показывает, что ресурс найден, но во время выполнения он ошибается при попытке установить текст в текстовом виде. Надеюсь, кто-то может указать, что вызывает это.Ресурс не найден Ошибка в приложении android

Вот код адаптера:

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

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

     songHolder = new SongHolder(); 
     songHolder.txtSongId = (TextView)row.findViewById(R.id.songid); 
     songHolder.txtName = (TextView)row.findViewById(R.id.name); 
     songHolder.txtArtist = (TextView)row.findViewById(R.id.artist); 
     songHolder.txtAlbum = (TextView)row.findViewById(R.id.album); 
     songHolder.txtNotes = (TextView)row.findViewById(R.id.notes); 

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

    ClassSong song = mSongs.get(position); 
    //###############THE FOLLOWING LINE IS WHERE THE ERROR OCCURS############### 
    songHolder.txtSongId.setText(song.getSongID()); 
    songHolder.txtName.setText(song.getName()); 
    songHolder.txtArtist.setText(song.getArtist()); 
    songHolder.txtAlbum.setText(song.getAlbum()); 
    songHolder.txtNotes.setText(song.getNotes()); 

    if(song.getAlbum() == "" || song.getAlbum() == null) 
     songHolder.txtAlbum.setVisibility(View.GONE); 
    else 
     songHolder.txtAlbum.setVisibility(View.VISIBLE); 

    if(song.getNotes() == "" || song.getNotes() == null) 
     songHolder.txtNotes.setVisibility(View.GONE); 
    else 
     songHolder.txtNotes.setVisibility(View.VISIBLE); 
    return row; 
} 

XML-для вида:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/gat" 
android:padding="0dip"> 

<LinearLayout android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView android:id="@+id/name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:textColor="#FFFFFF" 
     android:textSize="18sp"/> 
    <TextView android:id="@+id/songid" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:visibility="gone" 
     android:textColor="#FFFFFF" 
     android:textSize="18sp"/> 
    <TextView android:id="@+id/artist" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:textColor="#517789" 
     android:textSize="15sp"/> 

    <TextView android:id="@+id/album" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="3" 
     android:textColor="#517789" 
     android:textSize="12sp"/> 
</LinearLayout> 

<LinearLayout android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView android:id="@+id/notes" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textColor="#517789" 
     android:textSize="12sp"/> 
</LinearLayout> 

</LinearLayout> 

и код из списка деятельности, который вызывает адаптер:

private void fillData() { 

    ClassSong song = new ClassSong(this); 
    ClassSongListAdapter adapter = new ClassSongListAdapter(this, R.layout.song_row, song.getAllSongs(this)); 
    setListAdapter(adapter); 



} 

Рекомендуем также , при выборе вида в держателе он найден и имеет значение, которое не является нулевым, очевидно. Таким образом, кажется, что textview обнаружен при добавлении в держатель вида, но не тогда, когда я пытаюсь установить для него значение, если я прокомментирую строку песни, другие задания работают просто отлично. У кого-нибудь есть идеи?

Спасибо.

+0

Не могли бы вы отключить просмотр вторсырья? какая ошибка вы получаете, исключение null-указателя? –

+0

Спасибо, @Ridcully был прав, я пытался установить int в TextView, не преобразовывая его в строку, вместо того чтобы автоматически пытаться преобразовать его в строку, в которой он ищет ресурс с этим идентификатором. – collusionbdbh

ответ

2

I supppose, песня-ID представляет собой целое число: Затем преобразовать его в строку, и вы будете в порядке:

songHolder.txtSongId.setText(song.getSongID()+""); 

Объяснение: Есть два setText() метода, один ожидает параметр String, используется чтобы установить текст напрямую, другой, ожидая, что параметр int действительно ожидает идентификатор ресурса, например R.string.app_name, и если ваш идентификатор песни является целым числом, вы случайно вызвали более позднюю версию, ожидающую идентификатор ресурса, следовательно, ошибку.

+0

Это решает проблему, спасибо большое. Я знал, что это будет что-то маленькое, как будто я упускаю из виду. Ошибка, которая говорит, что ресурс не найден, делает его настолько запутанным. Еще раз спасибо. – collusionbdbh

Смежные вопросы