2017-01-17 18 views
-1

У меня есть проблема, искал со вчерашнего дня, я отправляю код:андроид студия Java nullpointerexeption по методу SetText

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_show_wishes); 

    mListView = (ListView) findViewById(R.id.listId); 

    refreshData(); 

} 

private void refreshData() { 

    wishes.clear(); 

    dbHandler = new DatabaseHandler(getApplicationContext()); 

    ArrayList<MyWishes> wishesFromDB = dbHandler.getWishes(); 

    for (int i = 0; i < wishesFromDB.size(); i++){ 

     String title = wishesFromDB.get(i).getTitle(); 
     String content = wishesFromDB.get(i).getContent(); 
     String date = wishesFromDB.get(i).getRecordDate(); 

     MyWishes myWishes = new MyWishes(); 

     myWishes.setTitle(title); 
     myWishes.setContent(content); 
     myWishes.setRecordDate(date); 

     wishes.add(myWishes); 

    } 

    dbHandler.close(); 

    mWishAdapter = new WishAdapter(showWishesActivity.this, R.layout.list_row, wishes); 
    mListView.setAdapter(mWishAdapter); 
    mWishAdapter.notifyDataSetChanged(); 
} 

public class WishAdapter extends ArrayAdapter<MyWishes>{ 

    Activity activity; 
    MyWishes wish; 
    ArrayList<MyWishes> mData = new ArrayList<>(); 
    int layoutRessource; 

    public WishAdapter(Activity act, int resource, ArrayList<MyWishes> data) { 
     super(act, resource, data); 
     activity = act; 
     layoutRessource = resource; 
     mData = data; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mData.size(); 
    } 

    @Override 
    public int getPosition(MyWishes item) { 
     return super.getPosition(item); 
    } 

    @Nullable 
    @Override 
    public MyWishes getItem(int position) { 
     return mData.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return super.getItemId(position); 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row = convertView; 
     ViewHolder holder = null; 

     if (row == null || (row.getTag()) == null){ 

      LayoutInflater inflater = LayoutInflater.from(activity); 
      row = inflater.inflate(layoutRessource, null); 

      holder = new ViewHolder(); 

      holder.mTitle = (TextView) findViewById(R.id.titre); 
      holder.mDate = (TextView) findViewById(R.id.date); 

      row.setTag(holder); 
     }else { 

      holder = (ViewHolder) row.getTag(); 
     } 

     holder.mMyWishes = getItem(position); 

     holder.mTitle.setText(holder.mMyWishes.getTitle()); 
     holder.mDate.setText(holder.mMyWishes.getRecordDate()); 

     return row; 
    } 

    class ViewHolder{ 

     MyWishes mMyWishes; 
     TextView mTitle; 
     TextView mContent; 
     TextView mDate; 
     TextView mId; 
    } 
} 

по методу GetView, я получаю исключение NullPointer на holder.setText.`

Я тоже вывесить XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:padding="12dp" 
android:background="#90f96666"> 

<ImageView 
    android:id="@+id/imageViewDatabaseId" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@android:drawable/ic_menu_agenda"/> 

<TextView 
    android:id="@+id/titre" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="The title" 
    android:textStyle="bold" 
    android:layout_toRightOf="@+id/imageViewDatabaseId" 
    android:layout_marginLeft="20dp"/> 

<TextView 
    android:id="@+id/date" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="The detail" 
    android:layout_toRightOf="@+id/imageViewDatabaseId" 
    android:layout_below="@+id/titleId" 
    android:layout_marginTop="3dp" 
    android:layout_marginLeft="40dp" 
    android:textStyle="italic"/> 

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
                       at wishlist.yassine.com.mywishlist.showWishesActivity$WishAdapter.getView(showWishesActivity.java:133) 

Я не понимаю проблему, любой может помочь мне, пожалуйста, спасибо за ваше время.

ответ

0
if (row == null || (row.getTag()) == null){ 
     LayoutInflater inflater = LayoutInflater.from(activity); 
     row = inflater.inflate(layoutRessource, null); 
     holder = new ViewHolder(); 
     holder.mTitle = (TextView) row.findViewById(R.id.titre); 
     holder.mDate = (TextView) row.findViewById(R.id.date); 
     row.setTag(holder); 
     } 
1

Вместо этого

holder.mTitle = (TextView) findViewById(R.id.titre); 

Попробуйте

holder.mTitle = (TextView) convertView.findViewById(R.id.titre); 
0

Ваше мнение не инициализируется внутри getView. Итак:

Удалить это:

 holder.mTitle = (TextView) findViewById(R.id.titre); 
     holder.mDate = (TextView) findViewById(R.id.date); 

С этим:

 holder.mTitle = (TextView) row.findViewById(R.id.titre); 
     holder.mDate = (TextView) row.findViewById(R.id.date); 
0

В Уре использования GetView это:

holder.mTitle = (TextView)row.findViewById(R.id.titre); 


    holder.mDate = (TextView)row.findViewById(R.id.date); 
0

вы должны пропустить вид ссылаться

listview заменить каждый товар в указанный макет

затем getview метод в целях возврата listview пункта

вы можете использовать как

holder.mTitle = (TextView) row.findViewById(R.id.titre); 

ряд представляет собой вид макета

@NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row = convertView; 
     ViewHolder holder = null; 

     if (row == null || (row.getTag()) == null){ 

      LayoutInflater inflater = LayoutInflater.from(activity); 
      row = inflater.inflate(layoutRessource, null); 
      holder = new ViewHolder(); 

      holder.mTitle = (TextView) row.findViewById(R.id.titre); 
      holder.mDate = (TextView) row.findViewById(R.id.date); 

      row.setTag(holder); 
     }else { 

      holder = (ViewHolder) row.getTag(); 
     } 

     holder.mMyWishes = getItem(position); 

     holder.mTitle.setText(holder.mMyWishes.getTitle()); 
     holder.mDate.setText(holder.mMyWishes.getRecordDate()); 

     return row; 
    } 

    class ViewHolder{ 

     MyWishes mMyWishes; 
     TextView mTitle; 
     TextView mContent; 
     TextView mDate; 
     TextView mId; 
    } 

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

  • Нет связанных вопросов^_^