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);
以下是几点观察:
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();