无法在自定义适配器中引用异步任务

时间:2014-01-22 17:07:23

标签: java android android-asynctask android-adapter

问题是,当我在自定义适配器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);
        }
    }
}

2 个答案:

答案 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);