我使用的是我在其他应用中使用的相同自定义适配器格式。我只更改了字符串引用,但运行应用程序时出现以下错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
我一直试图将我的大脑包裹起来,但我无法弄清楚问题是什么。一切都与其他应用程序完全相同,但由于某种原因在这个应用程序中不起作用。一切都完全一样。唯一的区别是数据库表是从中抽取数据的。这是产生错误的getView:
public class Holder
{
TextView title;
TextView description;
NetworkImageView img;
RatingBar rating;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.product_row, null);
holder.title=(TextView) rowView.findViewById(R.id.productName);
holder.img=(NetworkImageView) rowView.findViewById(R.id.productPic);
holder.rating=(RatingBar)rowView.findViewById(R.id.ratingBar2);
holder.title.setText(result.get(position).getName());
holder.rating.setRating(Float.valueOf(result.get(position).getRating().toString()));
// If you are using NetworkImageView
holder.img.setImageUrl(result.get(position).getImageURL(), VolleyController.getInstance().getImageLoader());
return rowView;
}
我的行数据/模型也完全相同。给出错误的行是:
holder.title.setText(result.get(position).getName());
在我的RowData模型中,getName是这样的:
public String getName(){
return name;
答案 0 :(得分:1)
使用这些代码行替换您的代码。在您的代码中,您没有使用View convertView
getView()
BaseAdapter
方法代替View
方法,而是使用自己的getView()
rowView ,因此,您正面临这些问题。因此,请使用adapter
类@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder=new Holder();
if (convertView == null) {
convertView = inflater.inflate(R.layout.product_row, null);
holder.title=(TextView) convertView.findViewById(R.id.productName);
holder.img=(NetworkImageView) convertView.findViewById(R.id.productPic);
holder.rating=(RatingBar)convertView.findViewById(R.id.ratingBar2);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(result.get(position).getName());
holder.rating.setRating(Float.valueOf(result.get(position).getRating().toString()));
// If you are using NetworkImageView
holder.img.setImageUrl(result.get(position).getImageURL(), VolleyController.getInstance().getImageLoader());
return convertView;
}
方法的视图
var myModule = app.__get__('this_module');
var spy = sinon.spy(myModule, 'set_this_foo');
myModule.set_this_foo();
expect(spy).to.have.returned({ boo : 'something' });
答案 1 :(得分:1)
首先,我问你为什么使用View Holder
的问题。因为它是view Holder
的错误/错误实现。请阅读此博客,它将帮助您了解view holder
模式
https://www.codeofaninja.com/2013/09/android-viewholder-pattern-example.html
请在 product_row.xml中查看TextView
的ID。我认为它只是TestView
的拼写错误ID。
答案 2 :(得分:0)
使用View
中的getView()
引用,不要创建单独的View
。
使用
`holder.title=(TextView) convertView.findViewById(R.id.productName);`
它可以解决问题