Java 相册照片未显示
我很想将我的应用程序相册中的图片显示到带有视图支架的回收器视图中,但在我尝试了教程并编译之后。没有错误,但我的应用程序中没有显示任何照片 仍然面临同样的问题,我已更新了当前代码 于2017年1月30日更新 代码如下: Album.javaJava 相册照片未显示,java,android,android-studio,Java,Android,Android Studio,我很想将我的应用程序相册中的图片显示到带有视图支架的回收器视图中,但在我尝试了教程并编译之后。没有错误,但我的应用程序中没有显示任何照片 仍然面临同样的问题,我已更新了当前代码 于2017年1月30日更新 代码如下: Album.java public class Album extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGr
public class Album extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.album, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.albumView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(), 3);
recyclerView.setLayoutManager(layoutManager);
ArrayList<CreateList> createLists = prepareData();
AlbumAdpater adapter = new AlbumAdpater(getContext(), createLists);
recyclerView.setAdapter(adapter);
return view;
}
private ArrayList<CreateList> prepareData() {
ArrayList<CreateList> theimage = new ArrayList<>();
String path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).toString();
File files = new File(path);
File file[] = files.listFiles();
Log.e("Album","PrepareData");
for (int i = 0; i < file.length; i++) {
CreateList createList = new CreateList();
createList.setImage_location(file[i].getAbsolutePath());
createList.setImage_title(file[i].getName());
theimage.add(createList);
}
return theimage;
}
public void reprmission() {if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED);
{
if (ActivityCompat.shouldShowRequestPermissionRationale(
getActivity(), android.Manifest.permission.READ_EXTERNAL_STORAGE)){
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]
{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSION);
}
} return;
}
}
public class CreateList {
private String image_title;
private Integer image_id;
private String image_location;
public String getImage_location() {
return image_location;
}
public void setImage_location(String image_location) {
this.image_location = image_location;
}
public String getImage_title() {
return image_title;
}
public void setImage_title(String android_version_name) {
this.image_title = android_version_name;
}
public Integer getImage_ID() {
return image_id;
}
public void setImage_ID(Integer android_image_url) {
this.image_id = android_image_url;
}
}
public class AlbumAdpater extends RecyclerView.Adapter<AlbumAdpater.ViewHolder> {
private ArrayList<CreateList> galleryList;
private Context context;
public AlbumAdpater(Context context, ArrayList<CreateList> galleryList){
this.galleryList= galleryList;
this.context = context;
}
@Override
public AlbumAdpater.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i){
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(AlbumAdpater.ViewHolder viewHolder, int i){
// viewHolder.title.setText(galleryList.get(i).getImage_title());
viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
// viewHolder.img.setImageResource((galleryList.get(i).getImage_ID()));
setImage(galleryList.get(i).getImage_location(),viewHolder.img);
Picasso.with(context).load(galleryList.get(i).getImage_location()).resize(50,50).centerCrop().into(viewHolder.img);
}
@Override
public int getItemCount(){
return galleryList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private ImageView img;
public ViewHolder(View view){
super(view);
title = (TextView) view.findViewById(R.id.imgtitle);
img = (ImageView) view.findViewById(R.id.img);
}
}
void setImage(String filePath, ImageView imageView){
Picasso.with(context).load(new File(filePath)).into(imageView);
}
}
AlbumAdapter.java
public class Album extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.album, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.albumView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(), 3);
recyclerView.setLayoutManager(layoutManager);
ArrayList<CreateList> createLists = prepareData();
AlbumAdpater adapter = new AlbumAdpater(getContext(), createLists);
recyclerView.setAdapter(adapter);
return view;
}
private ArrayList<CreateList> prepareData() {
ArrayList<CreateList> theimage = new ArrayList<>();
String path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).toString();
File files = new File(path);
File file[] = files.listFiles();
Log.e("Album","PrepareData");
for (int i = 0; i < file.length; i++) {
CreateList createList = new CreateList();
createList.setImage_location(file[i].getAbsolutePath());
createList.setImage_title(file[i].getName());
theimage.add(createList);
}
return theimage;
}
public void reprmission() {if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED);
{
if (ActivityCompat.shouldShowRequestPermissionRationale(
getActivity(), android.Manifest.permission.READ_EXTERNAL_STORAGE)){
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]
{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSION);
}
} return;
}
}
public class CreateList {
private String image_title;
private Integer image_id;
private String image_location;
public String getImage_location() {
return image_location;
}
public void setImage_location(String image_location) {
this.image_location = image_location;
}
public String getImage_title() {
return image_title;
}
public void setImage_title(String android_version_name) {
this.image_title = android_version_name;
}
public Integer getImage_ID() {
return image_id;
}
public void setImage_ID(Integer android_image_url) {
this.image_id = android_image_url;
}
}
public class AlbumAdpater extends RecyclerView.Adapter<AlbumAdpater.ViewHolder> {
private ArrayList<CreateList> galleryList;
private Context context;
public AlbumAdpater(Context context, ArrayList<CreateList> galleryList){
this.galleryList= galleryList;
this.context = context;
}
@Override
public AlbumAdpater.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i){
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(AlbumAdpater.ViewHolder viewHolder, int i){
// viewHolder.title.setText(galleryList.get(i).getImage_title());
viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
// viewHolder.img.setImageResource((galleryList.get(i).getImage_ID()));
setImage(galleryList.get(i).getImage_location(),viewHolder.img);
Picasso.with(context).load(galleryList.get(i).getImage_location()).resize(50,50).centerCrop().into(viewHolder.img);
}
@Override
public int getItemCount(){
return galleryList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private ImageView img;
public ViewHolder(View view){
super(view);
title = (TextView) view.findViewById(R.id.imgtitle);
img = (ImageView) view.findViewById(R.id.img);
}
}
void setImage(String filePath, ImageView imageView){
Picasso.with(context).load(new File(filePath)).into(imageView);
}
}
RecycleView
<?xml version="1.0" encoding="utf-8"?<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/albumView">
</android.support.v7.widget.RecyclerView>
1) 首先,确保图片目录中有图像文件
2) 您没有在列表项上添加文件路径。您只添加了文件名,而没有将其添加到列表中
for (int i = 0; i < file.length; i++) {
CreateList createList = new CreateList();
// createList.setImage_location(file[i].getName());
createList.setImage_location(file[i].getPath);
theimage.add(createList);
}
5) 从onBindViewHolder(..)方法执行以下操作
@Override
public void onBindViewHolder(AlbumAdpater.ViewHolder viewHolder, int i){
.....
......
setImage(galleryList.get(i).getImage_location(),viewHolder.img);
}
已更新
我使用毕加索库加载该文件,因为它将管理outOfMemoryError。所以,这里,如果你不想知道毕加索图书馆的意思,
使用下面的方法
Uri uri= Uri.parse(filePath);
imageView.setImageUri(uri);
与危险权限一样,您应该在运行时请求该权限。请检查并不要忘记在清单中声明它
您的照片不显示,因为您正在活动
中分配image\u位置
,并且在适配器中使用为空的image\u id
设置图像。您没有得到NPE,因为您正在创建一个空的ArrayList
,并且没有在其中推送任何对象
在ArrayList
中添加数据应该是这样的
private ArrayList<CreateList> prepareData() {
ArrayList<CreateList> theimage = new ArrayList<>();
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
.toString();
File f = new File(path);
File file[] = f.listFiles();
Log.e("Album","PrepareData");
for (int i = 0; i < file.length; i++) {
CreateList createList = new CreateList();
createList.setImage_location(file[i].getAbsolutePath());
createList.setImage_title(file[i].getName());
//If you want to use image_id then you have to set a value using setImage_ID here
theimage.add(createList);
}
return theimage;
}
使用滑翔
Glide.with(context).load(galleryList.get(i).getImage_location()).centerCrop().placeholder(R.drawable.placeholder_img).into(viewHolder.img);
设法得到Kaushik先生的帮助
Album.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
imgview = (ImageView) getActivity().findViewById(R.id.solopic);
soloimg = (LinearLayout)getActivity().findViewById(R.id.imgsolo);
View view = inflater.inflate(R.layout.album, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.albumView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(), 3);
recyclerView.setLayoutManager(layoutManager);
if (Build.VERSION.SDK_INT >= 23) {
if (!verifyGalleryPermission()) {
ArrayList<CreateList> createLists = prepareData();
AlbumAdpater adapter = new AlbumAdpater(getContext(), createLists);
recyclerView.setAdapter(adapter);
}
} else {
ArrayList<CreateList> createLists = prepareData();
AlbumAdpater adapter = new AlbumAdpater(getContext(), createLists);
recyclerView.setAdapter(adapter);
}
return view;
}
private ArrayList<CreateList> prepareData() {
ArrayList<CreateList> theimage = new ArrayList<>();
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()+"/BDiary";
File files = new File(path);
if(files.exists()){
File file[] = files.listFiles();
Log.e("Album","PrepareData");
for (File aFile : file) {
CreateList createList = new CreateList();
createList.setImage_location(aFile.getAbsolutePath());
createList.setImage_title(aFile.getName());
theimage.add(createList);
}
}
else
{
Toast.makeText(getContext(),"Folders not found", Toast.LENGTH_SHORT).show();
}
return theimage;
}
@TargetApi(23)
private boolean verifyGalleryPermission() {
if (ActivityCompat.checkSelfPermission(getActivity(),android.Manifest.permission.READ_EXTERNAL_STORAGE)
!=
PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(android.Manifest.permission.READ_EXTERNAL_STORAGE))
{
displayPermissionDialog("Would like to grant BDiary access to read your gallery",
new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION);
} else
{
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION);
}
return true;
}
return false;
}
@TargetApi(23)
private void displayPermissionDialog(String msg, final String[] permission, final int resultCode) {
AlertDialog alertDialog = new AlertDialog
.Builder(getActivity())
.setMessage(msg)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
requestPermissions(permission, resultCode);
}
}).setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
})
.create();
alertDialog.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_PERMISSION:
ArrayList<CreateList> createLists = prepareData();
AlbumAdpater adapter = new AlbumAdpater(getContext(), createLists);
recyclerView.setAdapter(adapter);
break;
}
}
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
imgview=(ImageView)getActivity().findViewById(R.id.solopic);
soloimg=(LinearLayout)getActivity().findViewById(R.id.imgsolo);
视图=充气机。充气(R.layout.album,container,false);
recyclerView=(recyclerView)view.findViewById(R.id.albumView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的GridLayoutManager(getContext(),3);
recyclerView.setLayoutManager(layoutManager);
如果(Build.VERSION.SDK_INT>=23){
如果(!verifyGalleryPermission()){
ArrayList CreateList=prepareData();
AlbumAdapter=新的AlbumAdapter(getContext(),CreateList);
recyclerView.setAdapter(适配器);
}
}否则{
ArrayList CreateList=prepareData();
AlbumAdapter=新的AlbumAdapter(getContext(),CreateList);
recyclerView.setAdapter(适配器);
}
返回视图;
}
private ArrayList prepareData(){
ArrayList theimage=新建ArrayList();
字符串路径=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()+“/BDiary”;
文件=新文件(路径);
if(files.exists()){
File File[]=files.listFiles();
Log.e(“相册”、“准备数据”);
对于(文件aFile:File){
CreateList CreateList=新建CreateList();
createList.setImage_位置(aFile.getAbsolutePath());
createList.setImage_title(aFile.getName());
图像添加(createList);
}
}
其他的
{
Toast.makeText(getContext(),“未找到文件夹”,Toast.LENGTH_SHORT.show();
}
返回图像;
}
@塔吉塔皮(23)
私有布尔值verifyGalleryPermission(){
if(ActivityCompat.checkSelfPermission(getActivity(),android.Manifest.permission.READ\u外部存储)
!=
PackageManager.权限(已授予){
if(shouldshowRequestPermissionRegulation(android.Manifest.permission.READ\u外部存储))
{
displayPermissionDialog(“希望授予BDiary访问权限以阅读您的图库”,
新字符串[]{android.Manifest.permission.READ\u EXTERNAL\u STORAGE},REQUEST\u permission);
}否则
{
requestPermissions(新字符串[]{android.Manifest.permission.READ\u EXTERNAL\u STORAGE},REQUEST\u permission);
}
返回true;
}
返回false;
}
@塔吉塔皮(23)
private void displayPermissionDialog(字符串消息,最终字符串[]权限,最终int结果代码){
AlertDialog AlertDialog=新建AlertDialog
.Builder(getActivity())
.setMessage(msg)
.setPositiveButton(android.R.string.ok,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
dialogInterface.cancel();
请求权限(权限、结果代码);
}
}).setNegativeButton(android.R.string.cancel,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
dialogInterface.cancel();
}
})
.create();
alertDialog.show();
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
开关(请求代码){
个案申请及许可:
ArrayList CreateList=prepareData();
AlbumAdapter=新的AlbumAdapter(getContext(),CreateList);
recyclerView.setAdapter(适配器);
打破
}
}
}
AlbumAdapter.java
公共类AlbumAdpeter扩展了RecyclerView.Adapter{
private ArrayList<CreateList> galleryList;
private Context context;
public AlbumAdpater(Context context, ArrayList<CreateList> galleryList){
this.galleryList= galleryList;
this.context = context;
}
@Override
public AlbumAdpater.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i){
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(AlbumAdpater.ViewHolder viewHolder, int i){
viewHolder.title.setText(galleryList.get(i).getImage_title());
viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
Glide.with(context).load(galleryList.get(i).getImage_location()).centerCrop().into(viewHolder.img);
}
@Override
public int getItemCount(){
return galleryList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private ImageView img;
public ViewHolder(View view){
super(view);
title = (TextView) view.findViewById(R.id.imgtitle);
img = (ImageView) view.findViewById(R.id.img);
}
}
}
private-ArrayList-galleryList;
私人语境;
公共AlbumadPath(上下文,ArrayList galleryList){
this.galleryList=galleryList;
this.context=上下文;
}
@凌驾
公共相册ADPATER.ViewHolder onCreateViewHolder(ViewGroup ViewGroup,int i){
View=LayoutFlater.from(viewGroup.getContext())。充气(R.Layou
private ArrayList<CreateList> galleryList;
private Context context;
public AlbumAdpater(Context context, ArrayList<CreateList> galleryList){
this.galleryList= galleryList;
this.context = context;
}
@Override
public AlbumAdpater.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i){
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(AlbumAdpater.ViewHolder viewHolder, int i){
viewHolder.title.setText(galleryList.get(i).getImage_title());
viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
Glide.with(context).load(galleryList.get(i).getImage_location()).centerCrop().into(viewHolder.img);
}
@Override
public int getItemCount(){
return galleryList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private ImageView img;
public ViewHolder(View view){
super(view);
title = (TextView) view.findViewById(R.id.imgtitle);
img = (ImageView) view.findViewById(R.id.img);
}
}
}