带有 ArrayAdapter 的 Picasso

Picasso with ArrayAdapter

我只想从使用 ArrayAdapter 使用 Picasso 加载 1 张图片开始。 我想我遗漏了一些小东西(希望如此)。只是想知道是否有人可以指出我正确的方向。我收到 NullPointer 异常。

这是 MainActivity 源代码:

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();
        }
    });
}

适配器 class 扩展 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 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