Java 我想在gallery中保存图像并与外部应用程序共享

Java 我想在gallery中保存图像并与外部应用程序共享,java,android,json,android-layout,adapter,Java,Android,Json,Android Layout,Adapter,我设计了一个应用程序,使用recyclerView显示图像。 我不是在点击摄像头中的图像,它是从json api下载的。 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/re

我设计了一个应用程序,使用recyclerView显示图像。 我不是在点击摄像头中的图像,它是从json api下载的。 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginRight="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="16dp"
    tools:context="com.bjp.app.bjpapp.MainActivity">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    </ScrollView>
</RelativeLayout>
适配器类文件代码在这里 Image_Adaper.java

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
    private List<Data> data;
    private Context context;
    private Bitmap bitmap;
    String url1;
    String filepath;
    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);
         url1=data1.getImgUrl();
        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) {
                    int position=getAdapterPosition();
                    Data data2=data.get(position);
                    // i want to share a image with social sites
                    Toast.makeText(context,"Product id "+data2+"  btn working",Toast.LENGTH_LONG).show();
                }
            });

            download.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,"download btn working"+url1,Toast.LENGTH_LONG).show();
                }
            });
        }

    }

}
公共类ImageAdapter扩展了RecyclerView.Adapter{
私人名单数据;
私人语境;
私有位图;
字符串url1;
字符串文件路径;
公共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=数据获取(位置);
url1=data1.getImgUrl();
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){
int position=getAdapterPosition();
Data data2=Data.get(位置);
//我想与社交网站共享一张图片
Toast.makeText(上下文,“产品id”+data2+“btn工作”,Toast.LENGTH_LONG.show();
}
});
下载.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“下载btn工作”+url1,Toast.LENGTH_LONG.show();
}
});
}
}
}
我附上邮件布局截图,以便于更多了解

应在单击下载按钮时下载图像。 而且图像应该可以共享到社交应用程序。 我尝试了一些代码,但不起作用。 伙计们,请帮我找到解决办法。 先谢谢你。

请参阅下面的链接,从图像视图下载或保存图像

用于共享图像,请参见下面的链接


如果你在谷歌上搜索,可以找到很多例子。你是如何保存和分享这张图片的?我在OnClickListener中没有看到任何代码,字符串root=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()可能重复;File myDir=新文件(root+“/saved_images_1”);int n=10000;n=发电机。下一个(n);字符串fname=“Image-”+n+“.jpg”;File File=新文件(myDir,fname);如果(file.exists())file.delete();请尝试{FileOutputStream out=new FileOutputStream(file);finalBitmap.compress(Bitmap.CompressFormat.JPEG,90,out);out.flush();out.close();@HemantParmar,不,我不是从相机捕获图像。我是从api下载图像并在recyclerView上显示。
public class Data implements Serializable {
    private int id;
    private String imgUrl;

    public Data(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;
    }
}
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
    private List<Data> data;
    private Context context;
    private Bitmap bitmap;
    String url1;
    String filepath;
    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);
         url1=data1.getImgUrl();
        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) {
                    int position=getAdapterPosition();
                    Data data2=data.get(position);
                    // i want to share a image with social sites
                    Toast.makeText(context,"Product id "+data2+"  btn working",Toast.LENGTH_LONG).show();
                }
            });

            download.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,"download btn working"+url1,Toast.LENGTH_LONG).show();
                }
            });
        }

    }

}