问题
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.
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 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;
}
}
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;
}
}
回答1:
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
来源:https://stackoverflow.com/questions/33328190/picasso-with-arrayadapter