【问题标题】:Universal image loader not work通用图像加载器不起作用
【发布时间】:2013-01-16 05:57:50
【问题描述】:

我是一名初级程序员。 我正在尝试使用通用图像加载器来显示从站点解析的图像,但它不起作用。我做错了什么?

谢谢。

这是一个测试程序。

package com.example.imageloader;

public class MainActivity extends ListActivity {

private final String URL = "Site_URL";
private ArrayList<Order> listItems = null;
private myAdapter myAdapter;
private ProgressDialog pd;  
ImageLoader imageLoader;    
DisplayImageOptions options;    
String imgSrc;
ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listItems = new ArrayList<Order>(); 
    this.myAdapter = new myAdapter(this, R.layout.list_item, listItems);
    setListAdapter(this.myAdapter);

    new Parse().execute(URL);

    lv = getListView();

    imageLoader = ImageLoader.getInstance();
    imageLoader.init(ImageLoaderConfiguration.createDefault(MainActivity.this));

    options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.ic_launcher)
    .showImageForEmptyUri(R.drawable.ic_launcher)
    .cacheOnDisc()
    .cacheInMemory()
    .build();
}


private class Parse extends AsyncTask<String, Integer, ArrayList<Order>> {
    @Override
    protected void onPreExecute() {
        pd = new ProgressDialog(MainActivity.this);
        pd.setMessage("Loading");
        pd.show();
    }

    @Override
    protected ArrayList<Order> doInBackground(String... urls) {
        listItems.clear();              
        try {
            Document doc = Jsoup.connect(URL).get();
            Elements img = doc.select("img");
            for (Element src : img) {
                String imgSrc = src.attr("src");

                System.out.println(imgSrc);                         

                Order o = new Order();
                o.setLink(imgSrc);
                o.setTextName(imgSrc);
                listItems.add(o);                   
            }               

        } catch (IOException e) {
            e.printStackTrace();
        }
        return listItems;
    }

    @Override
    protected void onPostExecute(ArrayList<Order> listItems) {  
        myAdapter = new myAdapter(MainActivity.this, R.layout.list_item, listItems);
        setListAdapter(myAdapter);
        myAdapter.notifyDataSetChanged();
        pd.dismiss();
    }
}
}

自定义适配器 我在这里遇到错误

package com.example.imageloader;

public class myAdapter extends ArrayAdapter<Order> {

private LayoutInflater lInflater;
private ArrayList<Order> data;
DisplayImageOptions options;
ImageLoader imageLoader;
private Order o;
String imgSrc;  

public myAdapter(Context c, int listItem, ArrayList<Order> data) {
    super(c, listItem, data);
    this.data = data;
    lInflater = LayoutInflater.from(c);
}

public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;

    if (convertView == null) {
        convertView = lInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
        holder.img = (ImageView) convertView.findViewById(R.id.image);
        holder.textName = (TextView) convertView.findViewById(R.id.text);
        convertView.setTag(holder);

        holder.textName.setOnClickListener(new OnItemClickListener(position));

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    o = data.get(position);
    holder.textName.setText(o.getTextName());
    holder.img.setTag(o);

        try {
            imageLoader.displayImage(o.getLink(), holder.img, options); // NullPointerException here!
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    } else {            
        return null;            
    }
    return convertView;


static class ViewHolder {
    ImageView img;
    TextView textName;
}
}

日志

01-16 11:55:04.480: W/System.err(19105): java.lang.NullPointerException
01-16 11:55:04.496: W/System.err(19105):    at          com.example.imageloader.myAdapter.getView(myAdapter.java:62)

【问题讨论】:

    标签: android universal-image-loader


    【解决方案1】:

    你应该添加这个代码

    imageLoader = ImageLoader.getInstance();
        imageLoader.init(ImageLoaderConfiguration.createDefault(c));
    

    在 myAdapter 的构造函数中。 并检查 imageview 的 id,它是否正确或在您引用它的正确位置

    holder.img = (ImageView) convertView.findViewById(R.id.image);
    

    【讨论】:

      【解决方案2】:

      只需添加

      imageLoader = ImageLoader.getInstance();
      

      myAdapter构造函数。

      【讨论】:

      • Ага, спасибо。 Уже сделал так。 Все работает.
      • Тогда пометьте как "ответ"。
      【解决方案3】:

      几个观察:

      1. 正如 @RobinHood 在他的解决方案中已经指出的那样,您需要在适配器中初始化 imageLoader 实例。

      2. 您已声明和实例:DisplayImageOptions options;,但未在将使用它的 Adapter 中配置它。您的选项在MainActivity 中配置。

      如果您查看此处的示例:https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/sample/src/com/nostra13/example/universalimageloader/ImageListActivity.java,您会注意到此处的 Activity 扩展了 BaseActivity(您扩展了 ListActivity),其中已经初始化了 imageLoader 的实例。

      如果您的活动 (MainActivity) 中有适配器 (myAdapter) 类,那就没问题了。

      修好这些,就好了。

      【讨论】:

        【解决方案4】:

        adpater 中,您忘记初始化imageloader 类,这是NullPointerException 的唯一原因。

        初始化它:

        imageLoader=new ImageLoader(activity.getApplicationContext());
        

        更新@替换您的 adpater 中的以下代码。

         public class myAdapter extends ArrayAdapter<Order> {
        
        private LayoutInflater lInflater;
        private ArrayList<Order> data;
        DisplayImageOptions options;
        ImageLoader imageLoader;
        private Order o;
        String imgSrc;  
        private Activity activity;
        
        public myAdapter(Activity a, int listItem, ArrayList<Order> data) {
            super(c, listItem, data);
            this.data = data;
             activity = a;
            lInflater = LayoutInflater.from(c);
            imageLoader=new ImageLoader(activity.getApplicationContext());
        }
        

        【讨论】:

        • 我不明白。如何初始化它? The constructor ImageLoader() is not visible
        • 再检查一下,我改变了一些东西,让我知道它是否有效。
        • 类似的错误 + 如果我更改适配器中的构造函数,我会在 MainActivity The constructor myAdapter(MainActivity, int, ArrayList&lt;Order&gt;) is undefined 中得到错误。谢谢,我认为解决了我的问题:)
        • 它的上下文问题,传递适当的上下文,check this 现在你应该挖掘你的代码并追踪你错过了什么。
        猜你喜欢
        • 2016-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多