毕加索与ArrayAdapter [英] Picasso with ArrayAdapter
问题描述
我只想从使用ArrayAdapter的Picasso加载1张图片开始. 我想我很想念一些小事.只是想知道是否有人可以指出我正确的方向.我收到NullPointer异常.
I just want to start off with loading 1 picture using Picasso using ArrayAdapter. I think i'm missing something minor (hopefully). Just wondering if someone can point me to right direction. I'm getting a NullPointer Exception.
这是MainActivity源代码:
This is the MainActivity source code:
public class MainActivity extends AppCompatActivity {
ListView listView;
ArrayList<DataModel> dataModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
listView = (ListView) findViewById(R.id.listView);
MyAdapter adapter = new MyAdapter(this, R.layout.datamodel, dataModel);
listView.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
Adapter类扩展了ArrayAdapter<>类
Adapter class extending the ArrayAdapter<> class
public class MyAdapter extends ArrayAdapter<DataModel> {
Context context;
public MyAdapter(Context context, int resource, List<DataModel> objects) {
super(context, resource, objects);
this.context = context;
}
private class ViewHolder {
//Create Holder to contain inflated xml file elements//
ImageView imageView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
DataModel dataModel = getItem(position);
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.datamodel, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.iconView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Picasso
.with(context)
.load("http://i.imgur.com/DvpvklR.png")
.into(holder.imageView);
return convertView;
}
}
行信息,DataModel类
Row information, the DataModel class
public class DataModel {
int iconId;
public DataModel(int iconId) {
this.iconId = iconId;
}
public int getIconId() {
return iconId;
}
public void setIconId(int iconId) {
this.iconId = iconId;
}
}
推荐答案
问题出在适配器的参数List<DataModel> objects
上.超类取消引用它,而不检查空值.初始化它会修复您的NPE
,但是,当然,除非您不提供一些数据,否则不会调用getView
the issue is with your the parameter List<DataModel> objects
of your Adapter. The superclass derefences it without checking against null values. Initializing it will fix your NPE
, but of course, getView will not be called until you don't feed it up with some data
这篇关于毕加索与ArrayAdapter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!