Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在自定义适配器中引用异步任务_Java_Android_Android Asynctask_Android Adapter - Fatal编程技术网

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

Java 无法在自定义适配器中引用异步任务,java,android,android-asynctask,android-adapter,Java,Android,Android Asynctask,Android Adapter,问题是,当我在自定义适配器getView函数中设置异步下载任务时,它返回 无法将ImageLoader解析为类型 错误。该类位于同一项目的不同包中,它通常可以导入,但在这种情况下,它只显示错误。如何解决这个问题?谢谢你的帮助 LeadersAdapter.java public class LeadersAdapter extends ArrayAdapter<Record> { public LeadersAdapter(Context context, int tex

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

    }
}
公共类引导适配器扩展了ArrayAdapter{
公共领导适配器(上下文,int textViewResourceId){
super(上下文,textViewResourceId);
}
公共领导适配器(上下文、int资源、列表项){
超级(上下文、资源、项目);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
拉平机vi;
vi=LayoutInflater.from(getContext());
v=vi.充气(R.布局.引线\记录\行,空);
}
记录p=getItem(位置);
如果(p!=null){
ImageView图片=(ImageView)v.findViewById(R.id.profile_图片);
TextView name=(TextView)v.findViewById(R.id.name);
TextView pts=(TextView)v.findViewById(R.id.pts);
新建ImageLoader().execute(pic,p.url);
name.setText(p.name);
pts.setText(p.pts);
}
返回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);
        }
    }
}
import java.io.IOException;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.widget.ImageView;
类ImageLoader扩展异步任务{
私有静态字符串TAG=“ImageLoader”;
公共输入流输入;
公众形象观;
公共字符串imageURL;
公共图像加载器(字符串文本){
}
@凌驾
受保护位图doInBackground(对象…参数){
试一试{
视图=(ImageView)参数[0];
imageURL=(字符串)参数[1];
URL URL=新URL(imageURL);
HttpURLConnection连接=(HttpURLConnection)url
.openConnection();
connection.setDoInput(true);
connection.connect();
输入=连接。getInputStream();
位图myBitmap=BitmapFactory.decodeStream(输入);
返回我的位图;
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}最后{
试一试{
input.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
@凌驾
受保护的void onPostExecute(位图结果){
if(结果!=null&&view!=null){
view.setImageBitmap(结果);
}
}
}

您的
ImageLoader
类(未定义为
public
)正在使用默认的访问修饰符
package private
,因此它仅在自己的包中可见

改变

class ImageLoader[…]

公共类ImageLoader[…]

应该解决您的可访问性问题

此外,我强烈建议您查看现有的图像加载库(如),而不是烘焙自己的图像库。

我建议使用Square的库,它易于使用

简单的一行将图像从web加载到ImageView

例:


您有一个构造函数,它接受param
公共图像加载器(字符串文本){}
。但是您有
newimageloader().execute(pic,p.url)
。应该是
newimageloader(“某物”).execute(pic,p.url)
。也考虑使用UIL或PICASSO的延迟加载
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);