问题是,当我在自定义适配器getView函数中设置异步下载任务时,它返回
无法将ImageLoader解析为类型
错误。该类位于同一项目的不同包中,通常可以导入但在这种情况下它只显示错误。如何解决问题?谢谢你的帮助
LeadersAdapter.java
public class LeadersAdapter extends ArrayAdapter<Record> {
public LeadersAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public LeadersAdapter(Context context, int resource, List<Record> items) {
super(context, resource, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.leader_record_row, null);
}
Record p = getItem(position);
if (p != null) {
ImageView pic = (ImageView) v.findViewById(R.id.profile_pic);
TextView name = (TextView) v.findViewById(R.id.name);
TextView pts = (TextView) v.findViewById(R.id.pts);
new ImageLoader().execute(pic,p.url);
name.setText(p.name);
pts.setText(p.pts);
}
return v;
}
}
ImageLoader.java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
class ImageLoader extends AsyncTask<Object, Void, Bitmap> {
private static String TAG = "ImageLoader";
public InputStream input;
public ImageView view;
public String imageURL;
public ImageLoader(String text){
}
@Override
protected Bitmap doInBackground(Object... params) {
try {
view = (ImageView) params[0];
imageURL = (String) params[1];
URL url = new URL(imageURL);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoInput(true);
connection.connect();
input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected void onPostExecute(Bitmap result) {
if (result != null && view != null) {
view.setImageBitmap(result);
}
}
}
答案 0 :(得分:1)
您的ImageLoader
类(未定义为public
)正在使用默认访问修饰符package-private
,因此它只能在自己的包中显示。
更改...
class ImageLoader [...]
为...
public class ImageLoader [...]
应该修复您的辅助功能问题。
此外,我强烈建议您查看现有的图片加载库(例如Universal Image Loader),而不是自己烘焙。
答案 1 :(得分:0)
我推荐Square的Picasso lib,它很容易使用。
简单的一行,用于将图像从Web加载到ImageView。
例如:
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);