Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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_Java_Android_Android Recyclerview - Fatal编程技术网

Java 我想在适配器文件中检索图像url

Java 我想在适配器文件中检索图像url,java,android,android-recyclerview,Java,Android,Android Recyclerview,我使用模态类和适配器在recyclerView类文件上显示图像, 现在我想在外部共享图像,并在手机上下载图像 但我尝试了很多,我不明白如何在适配器文件中获取图像URL。 请帮我找到解决办法 public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> { private List<Data> data; private Context context;

我使用模态类和适配器在
recyclerView
类文件上显示图像, 现在我想在外部共享图像,并在手机上下载图像

但我尝试了很多,我不明白如何在适配器文件中获取图像URL。 请帮我找到解决办法

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
    private List<Data> data;
    private Context context;

    public ImageAdapter(List<Data> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_design,parent,false);
        return new ImageAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final Data data1=data.get(position);
        ImageView imageView=holder.imageView;
        Glide.with(context)
                .load(data1.getImgUrl())
                .placeholder(R.drawable.logo)
                .into(imageView);
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
    public ImageView imageView;
    public ImageButton share,download;
        public ViewHolder(final View itemView) {
            super(itemView);
            imageView=(ImageView)itemView.findViewById(R.id.image);
            share=(ImageButton)itemView.findViewById(R.id.share);
            download=(ImageButton)itemView.findViewById(R.id.download);

            share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Toast.makeText(context, "url", Toast.LENGTH_SHORT).show();
                    Intent shareIntent = new Intent();
                    shareIntent.setAction(Intent.ACTION_SEND);
                    shareIntent.putExtra(Intent.EXTRA_STREAM,"url here ");
                    shareIntent.setType("images/*");
                   context.startActivity(Intent.createChooser(shareIntent,"Send Via"));
                    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }
            });

            download.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
        }
    }


}
公共类ImageAdapter扩展了RecyclerView.Adapter{
私人名单数据;
私人语境;
公共ImageAdapter(列表数据、上下文){
这个数据=数据;
this.context=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View-View=LayoutFlater.from(parent.getContext()).flate(R.layout.layout\u design,parent,false);
返回新的ImageAdapter.ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
最终数据data1=数据获取(位置);
ImageView ImageView=holder.ImageView;
带(上下文)滑动
.load(data1.getImgUrl())
.占位符(R.可绘制.徽标)
.进入(图像视图);
}
@凌驾
public int getItemCount(){
返回data.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共影像视图;
公共图像按钮共享,下载;
公共视图持有者(最终视图项视图){
超级(项目视图);
imageView=(imageView)itemView.findViewById(R.id.image);
share=(ImageButton)itemView.findViewById(R.id.share);
下载=(ImageButton)itemView.findViewById(R.id.download);
share.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//Toast.makeText(上下文,“url”,Toast.LENGTH_SHORT).show();
意向共享意向=新意向();
shareIntent.setAction(Intent.ACTION\u SEND);
shareIntent.putExtra(Intent.EXTRA_流,“url在此”);
setType(“images/*”);
context.startActivity(Intent.createChooser(shareIntent,“发送方式”);
setFlags(Intent.FLAG\u活动\u新任务);
}
});
下载.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
}
}
}
提前谢谢

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    final Data data1=data.get(position);
    ImageView imageView=holder.imageView;
    Glide.with(context)
            .load(data1.getImgUrl())
            .placeholder(R.drawable.logo)
            .into(imageView);
}
替换为

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    final Data data1=data.get(position);
    ImageView imageView=holder.imageView;
    holder.share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(context, "url", Toast.LENGTH_SHORT).show();
                Intent shareIntent = new Intent();
                shareIntent.setAction(Intent.ACTION_SEND);
                shareIntent.putExtra(Intent.EXTRA_STREAM,getLocalBitmapUri(getBitmapFromURL(data1.getImgUrl())));
                shareIntent.setType("images/*");
                shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  context.startActivity(Intent.createChooser(shareIntent,"Send Via"));

            }
        });


    Glide.with(context)
            .load(data1.getImgUrl())
            .placeholder(R.drawable.logo)
            .into(imageView);
}
还加

  public Uri getLocalBitmapUri(Bitmap bmp) {
    Uri bmpUri = null;
    try {
        File file =  new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image" + System.currentTimeMillis() + ".png");
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}


您正在从列表中获取图像url,在共享之前,您必须使用
Picasso
将url加载到位图中。之后

 share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     shareItem(data1.getImgUrl()) 
                }
            });


    public void shareItem(String url) {
        Picasso.with(getApplicationContext()).load(url).into(new Target() {
            @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("image/*");
                i.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(bitmap));
                startActivity(Intent.createChooser(i, "Share Your Image"));
            }
            @Override public void onBitmapFailed(Drawable errorDrawable) { }
            @Override public void onPrepareLoad(Drawable placeHolderDrawable) { }
        });
    }
Bitmap
转换为
URi

public Uri getLocalBitmapUri(Bitmap bmp) {
    Uri bmpUri = null;
    try {
        File file =  new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image" + System.currentTimeMillis() + ".png");
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}

希望它能帮助你

从适配器参数中的适配器调用发送url、字符串或数组列表。谢谢
data1.getImgUrl()
返回了什么?我正在从API文件中提取。使用getter和setter类。公共类数据实现可序列化的{private int id;private String imgUrl;公共数据(int id,String imgUrl){this.id=id;this.imgUrl=imgUrl;}public int getId(){return id;}public void setId(int id){this.id=id;}public String getImgUrl(){return imgUrl;}public void setImgUrl(String imgUrl){this.imgUrl=imgUrl;}}@HemantParmar向我显示了每个图像上的链接。但当我直接从url共享时,它不起作用。你必须将图像uri转换为位图,我发布ans have look。谢谢,但这向我显示了android.util.AndroidRuntimeException:调用startActivity()从活动上下文外部需要标志\u Activity\u NEW\u TASK标志。这真的是您想要的吗?但是我已经添加了一个标志Activitycan您可以将代码发送给我,在那里填充适配器您正在用java为我提供一些函数。kotlin中有一些函数。抱歉,我正在处理这两个函数,所以没有转换另一个……您在哪里发布了该函数代码..我找不到它否,它显示了如何实现所有Target()方法,并且data1=data.getimgurl()不起作用
public Uri getLocalBitmapUri(Bitmap bmp) {
    Uri bmpUri = null;
    try {
        File file =  new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image" + System.currentTimeMillis() + ".png");
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}