Android 通用图像加载程序不工作

Android 通用图像加载程序不工作,android,universal-image-loader,Android,Universal Image Loader,我是一名初级程序员。 我正在尝试使用通用图像加载器来显示从站点解析的图像,但它不起作用。我做错了什么 谢谢 这是一个测试程序 package com.example.imageloader; public class MainActivity extends ListActivity { private final String URL = "Site_URL"; private ArrayList<Order> listItems = null; private myAdapt

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

谢谢

这是一个测试程序

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

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

初始化它:

imageLoader=new ImageLoader(activity.getApplicationContext());
更新了adpater中的@replace下面的代码

 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());
}
公共类myAdapter扩展了ArrayAdapter{
私人停车场;
私有数组列表数据;
显示图像选项;
图像加载器;
私人命令o;
字符串imgSrc;
私人活动;
公共myAdapter(活动a、int listItem、ArrayList数据){
超级(c、列表项、数据);
这个数据=数据;
活动=a;
lInflater=从(c)开始的LayoutInflater;
imageLoader=新的imageLoader(activity.getApplicationContext());
}

您应该添加此代码

imageLoader = ImageLoader.getInstance();
    imageLoader.init(ImageLoaderConfiguration.createDefault(c));
在myAdapter的构造函数中。 并检查imageview的id,它是正确的还是在您引用它的正确位置

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

以下是几点观察:

  • 正如@RobinHood在他的解决方案中指出的,您需要初始化适配器中的
    imageLoader
    实例

  • 您已声明并实例:
    DisplayImageOptions;
    但未在将使用它的
    适配器中配置它。您的选项是在
    MainActivity
    中配置的

  • 如果您查看下面的示例:,您会注意到这里的活动扩展了
    BaseActivity
    (您扩展了
    ListActivity
    ),它已经初始化了imageLoader的实例

    如果您的活动(MainActivity)中有adapter(
    myAdapter
    )类,那么就没有问题了

    修复这些,它会很好。

    只需添加

    imageLoader = ImageLoader.getInstance();
    

    myAdapter
    构造函数。

    我不明白。如何初始化它?
    构造函数ImageLoader()不可见
    再次检查,我更改了一些内容,并让我知道它是否工作。类似错误+如果我更改适配器中的构造函数,我在MainActivity
    构造函数myAdapter中会出错(MainActivity,int,ArrayList)未定义。谢谢,我认为我的问题已经解决:)它的上下文问题,通过适当的上下文,现在你应该挖掘你的代码并跟踪你缺少的东西。АΓа,СПаааааааааааааааааааааа。
    
    holder.img = (ImageView) convertView.findViewById(R.id.image);
    
    imageLoader = ImageLoader.getInstance();