毕加索与ArrayAdapter [英] Picasso with ArrayAdapter

查看:69
本文介绍了毕加索与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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆