Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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 如何从url获取图像到arrayList_Java_Android_Gridview_Arraylist - Fatal编程技术网

Java 如何从url获取图像到arrayList

Java 如何从url获取图像到arrayList,java,android,gridview,arraylist,Java,Android,Gridview,Arraylist,我试图显示从url读取的图像,它们不仅仅是图像,所以我必须将所有图像都放在arraylist中,然后使图像显示在gridview中,由于某些原因,它没有显示任何内容,gridview完全为空,请告知我做错了什么 BottomSheetDialog_Smiles.java Communicator.getInstance().on("subscribe start", new Emitter.Listener() { @Override public void c

我试图显示从url读取的图像,它们不仅仅是图像,所以我必须将所有图像都放在arraylist中,然后使图像显示在gridview中,由于某些原因,它没有显示任何内容,gridview完全为空,请告知我做错了什么

BottomSheetDialog_Smiles.java

Communicator.getInstance().on("subscribe start", new Emitter.Listener() {

        @Override
        public void call(Object... args) {
            try{

JSONDictionary response = (JSONDictionary) args[0];
String str = response.get("emojiPack").toString();
JSONArray emojies = new JSONArray(str);

for(int i=0;i<emojies.length();i++){

JSONObject response2 = (JSONObject) 
emojies.getJSONObject(i);

emojiModel = new EmojiModel((String) response2.get("urlFile"));
emojiUrl = emojiModel.getEmojiFile();
Picasso.with(getApplicationContext()).load(emojiUrl);
JSONDictionary t = JSONDictionary.fromString(response2.toString());
emojiModel.init(t);
emojieModels.add(new EmojiModel(emojiUrl));
                }

EmojiAdapter emojiAdapter = new EmojiAdapter(getApplicationContext(), 
emojieModels);
gridView2.setAdapter(emojiAdapter);


            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });
    EmojiAdapter emojiAdapter = new EmojiAdapter(getApplicationContext(), 
    emojieModels);
    gridView2.setAdapter(emojiAdapter);

在适配器中使用毕加索显示图像

   @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater o =
 (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = o.inflate(R.layout.gifts_layout_2, parent , false);

        ImageView imageView = (ImageView) v.findViewById(R.id.smile_image_view);

        Picasso.with(getApplicationContext()).load(list.get(position).getEmojiUrl()).into(imageView);

        return v;
        }
    }

显然,这行代码行不通:

imageView.setImageResource(Integer.parseInt((list.get(position)).urlFile));
相反,只需使用glide或piccaso加载图片即可。 首先将此行添加到gradle文件:

  implementation 'com.github.bumptech.glide:glide:4.5.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'
然后,不要写在上面,只需写: Glide.with(context).load(list.get(position)).urlFile.into(imageView)

皮卡索图书馆也是一样的


还可以通过以下方式更改适配器:

public class EmojiAdapter extends BaseAdapter {

    Context context;
    ArrayList<EmojiModel> list = new ArrayList<>();

    public EmojiAdapter(Context context,ArrayList<EmojiModel> list) {
        super(context, R.layout.smiles_items_layout, list);
        this.context = context;
        this.list = list;
    }
    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater o =
                (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = o.inflate(R.layout.gifts_layout_2, parent , false);

        ImageView imageView = (ImageView) v.findViewById(R.id.smile_image_view);


        imageView.setImageResource(Integer.parseInt((list.get(position)).urlFile));

        return v;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}
公共类EmojiAdapter扩展BaseAdapter{
语境;
ArrayList=新建ArrayList();
公共EmojiAdapter(上下文,数组列表){
super(上下文、R.layout.smiles\u项目\u布局、列表);
this.context=上下文;
this.list=列表;
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
平放机=
(LayoutFlater)context.getSystemService(context.LAYOUT\u充气机\u服务);
视图v=o.充气(R.布局.礼物/布局2,父级,假);
ImageView ImageView=(ImageView)v.findViewById(R.id.smile\u image\u view);
setImageResource(Integer.parseInt((list.get(position)).urlFile));
返回v;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
}

这完全有道理,但是由于某些原因,它仍然没有显示任何图像。我已经更新了代码,我猜您需要查看的所有代码都以这种方式更改了这一行:Picasso.with(getApplicationContext()).load(emojiUrl).into(yourImageView);您应该在适配器中使用该行。而不是imageView.setImageResource(Integer.parseInt((list.get(position)).urlFile));是的,我在适配器中将其更改为Picasso.with(getApplicationContext()).load(list.get(position.getEmojiFile()).into(imageView);但仍然不起作用我已经尝试了上面的代码,但仍然没有显示任何图像扫描您与我共享该图像url?这些图像仍然在本地服务器上,但如果您愿意,可以在任何url上进行解释
  implementation 'com.github.bumptech.glide:glide:4.5.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'
public class EmojiAdapter extends BaseAdapter {

    Context context;
    ArrayList<EmojiModel> list = new ArrayList<>();

    public EmojiAdapter(Context context,ArrayList<EmojiModel> list) {
        super(context, R.layout.smiles_items_layout, list);
        this.context = context;
        this.list = list;
    }
    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater o =
                (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = o.inflate(R.layout.gifts_layout_2, parent , false);

        ImageView imageView = (ImageView) v.findViewById(R.id.smile_image_view);


        imageView.setImageResource(Integer.parseInt((list.get(position)).urlFile));

        return v;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}