Picasso with ArrayAdapter

萝らか妹 提交于 2019-12-14 01:53:50

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!