Java 无法确定在何处检查长度数组
我知道什么是空指针异常,但我的问题是我不知道如何处理它,并在下面的代码中给用户一个toast消息,告诉用户列表为空。我正在为我的应用程序创建一个图像库,并指定系统将所有文件和文件夹加载到Android应用程序的路径 当路径中没有文件或文件夹时,应用程序崩溃,原因是:Java 无法确定在何处检查长度数组,java,android,Java,Android,我知道什么是空指针异常,但我的问题是我不知道如何处理它,并在下面的代码中给用户一个toast消息,告诉用户列表为空。我正在为我的应用程序创建一个图像库,并指定系统将所有文件和文件夹加载到Android应用程序的路径 当路径中没有文件或文件夹时,应用程序崩溃,原因是: Attempting to invoke length on a null array. GalleryFragment.java @Nullable @Override public View onCreateView(Layo
Attempting to invoke length on a null array.
GalleryFragment.java
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gallery, container, false);
toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
ImageView icon = (ImageView) getActivity().findViewById(R.id.toolbarIcon);
icon.setImageResource(R.drawable.ic_perm_media_black_24dp);
icon.setColorFilter(getResources().getColor(R.color.Gallery));
TextView title = (TextView) getActivity().findViewById(R.id.toolbarTitle);
title.setText(getString(R.string.galleryLabel));
toolbar.setBackground(getResources().getDrawable(R.drawable.tile_green));
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_menu_green_24dp));
gridView = (GridView) view.findViewById(R.id.gridView);
setGridAdapter(Environment.getExternalStorageDirectory().getPath());
return view;
}
private void setGridAdapter(String path) {
// Create a new grid adapter
gridItems = createGridItems(path);
MyGridAdapter adapter = new MyGridAdapter(getContext(), gridItems);
// Set the grid adapter
gridView.setAdapter(adapter);
// Set the onClickListener
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (gridItems.get(position).isDirectory()) {
setGridAdapter(gridItems.get(position).getPath());
}
else {
gridItems.get(position).getImage();
}
}
});
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (gridItems.get(position).isDirectory()) {
Dialog dialog = new Dialog(getContext());
dialog.setTitle("Test");
dialog.setContentView(R.layout.activity_recognition);
dialog.show();
return false;
} else {
Dialog dialog = new Dialog(getContext());
dialog.setTitle("Test");
dialog.setContentView(R.layout.activity_reset_password);
dialog.show();
return false;
}
}
});
}
private List<GridViewItem> createGridItems(String directoryPath) {
List<GridViewItem> items = new ArrayList<>();
// List all the items within the folder.
File[] files = new File(directoryPath).listFiles(new ImageFileFilter());
for (File file : files) {
// Add the directories containing images or sub-directories
if (file.isDirectory()
&& file.listFiles(new ImageFileFilter()).length > 0) {
items.add(new GridViewItem(file.getAbsolutePath(), true, null));
}
// Add the images
else {
Bitmap image = BitmapHelper.decodeBitmapFromFile(file.getAbsolutePath(),
50,
50);
items.add(new GridViewItem(file.getAbsolutePath(), false, image));
}
}
return items;
}
/**
* Checks the file to see if it has a compatible extension.
*/
private boolean isImageFile(String filePath) {
if (filePath.endsWith(".jpg") || filePath.endsWith(".png"))
// Add other formats as desired
{
return true;
}
return false;
}
/**
* This can be used to filter files.
*/
private class ImageFileFilter implements FileFilter {
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
else if (isImageFile(file.getAbsolutePath())) {
return true;
}
return false;
}
}
public class MyGridAdapter extends BaseAdapter {
LayoutInflater inflater;
List < GridViewItem > items;
private Context mContext;
public MyGridAdapter(Context context, List < GridViewItem > items) {
mContext = context;
this.items = items;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_item, null);
}
TextView text = (TextView) convertView.findViewById(R.id.textView);
text.setText(items.get(position).getPath());
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
Bitmap image = items.get(position).getImage();
if (image != null) {
imageView.setImageBitmap(image);
} else {
// If no image is provided, display a folder icon.
imageView.setImageResource(R.drawable.ic_folder_grey_24dp);
}
return convertView;
}
}
@Nullable
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_gallery,container,false);
toolbar=(toolbar)getActivity().findViewById(R.id.toolbar);
ImageView图标=(ImageView)getActivity();
icon.setImageResource(R.drawable.ic\u perm\u media\u black\u 24dp);
setColorFilter(getResources().getColor(R.color.Gallery));
TextView title=(TextView)getActivity().findViewById(R.id.toolbarTitle);
title.setText(getString(R.string.galleryLabel));
setBackground(getResources().getDrawable(R.drawable.tile_green));
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_菜单_绿色_24dp));
gridView=(gridView)view.findViewById(R.id.gridView);
setGridAdapter(Environment.getExternalStorageDirectory().getPath());
返回视图;
}
私有void setGridAdapter(字符串路径){
//创建一个新的网格适配器
gridItems=createGridItems(路径);
MyGridAdapter=新的MyGridAdapter(getContext(),gridItems);
//设置网格适配器
setAdapter(适配器);
//设置onclick侦听器
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
if(gridItems.get(position.isDirectory()){
setGridAdapter(gridItems.get(position.getPath());
}
否则{
get(position.getImage();
}
}
});
setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
if(gridItems.get(position.isDirectory()){
Dialog=newdialog(getContext());
对话框。设置标题(“测试”);
对话框.setContentView(R.layout.activity\u识别);
dialog.show();
返回false;
}否则{
Dialog=newdialog(getContext());
对话框。设置标题(“测试”);
setContentView(R.layout.activity\u reset\u password);
dialog.show();
返回false;
}
}
});
}
私有列表createGridItems(字符串目录路径){
列表项=新建ArrayList();
//列出文件夹中的所有项目。
File[]files=新文件(directoryPath).listFiles(新的ImageFileFilter());
用于(文件:文件){
//添加包含图像或子目录的目录
if(file.isDirectory()文件)
&&file.listFiles(新的ImageFileFilter())。长度>0){
add(新的GridViewItem(file.getAbsolutePath(),true,null));
}
//添加图像
否则{
位图图像=BitmapHelper.decodeBitmapFromFile(file.getAbsolutePath(),
50,
50);
添加(新的GridViewItem(file.getAbsolutePath(),false,image));
}
}
退货项目;
}
/**
*检查该文件是否具有兼容的扩展名。
*/
私有布尔isImageFile(字符串文件路径){
if(filePath.endsWith(“.jpg”)| | filePath.endsWith(“.png”))
//根据需要添加其他格式
{
返回true;
}
返回false;
}
/**
*这可用于筛选文件。
*/
私有类ImageFileFilter实现FileFilter{
@凌驾
公共布尔接受(文件){
if(file.isDirectory()){
返回true;
}
else if(isImageFile(file.getAbsolutePath())){
返回true;
}
返回false;
}
}
GalleryAdapter.java
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gallery, container, false);
toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
ImageView icon = (ImageView) getActivity().findViewById(R.id.toolbarIcon);
icon.setImageResource(R.drawable.ic_perm_media_black_24dp);
icon.setColorFilter(getResources().getColor(R.color.Gallery));
TextView title = (TextView) getActivity().findViewById(R.id.toolbarTitle);
title.setText(getString(R.string.galleryLabel));
toolbar.setBackground(getResources().getDrawable(R.drawable.tile_green));
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_menu_green_24dp));
gridView = (GridView) view.findViewById(R.id.gridView);
setGridAdapter(Environment.getExternalStorageDirectory().getPath());
return view;
}
private void setGridAdapter(String path) {
// Create a new grid adapter
gridItems = createGridItems(path);
MyGridAdapter adapter = new MyGridAdapter(getContext(), gridItems);
// Set the grid adapter
gridView.setAdapter(adapter);
// Set the onClickListener
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (gridItems.get(position).isDirectory()) {
setGridAdapter(gridItems.get(position).getPath());
}
else {
gridItems.get(position).getImage();
}
}
});
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (gridItems.get(position).isDirectory()) {
Dialog dialog = new Dialog(getContext());
dialog.setTitle("Test");
dialog.setContentView(R.layout.activity_recognition);
dialog.show();
return false;
} else {
Dialog dialog = new Dialog(getContext());
dialog.setTitle("Test");
dialog.setContentView(R.layout.activity_reset_password);
dialog.show();
return false;
}
}
});
}
private List<GridViewItem> createGridItems(String directoryPath) {
List<GridViewItem> items = new ArrayList<>();
// List all the items within the folder.
File[] files = new File(directoryPath).listFiles(new ImageFileFilter());
for (File file : files) {
// Add the directories containing images or sub-directories
if (file.isDirectory()
&& file.listFiles(new ImageFileFilter()).length > 0) {
items.add(new GridViewItem(file.getAbsolutePath(), true, null));
}
// Add the images
else {
Bitmap image = BitmapHelper.decodeBitmapFromFile(file.getAbsolutePath(),
50,
50);
items.add(new GridViewItem(file.getAbsolutePath(), false, image));
}
}
return items;
}
/**
* Checks the file to see if it has a compatible extension.
*/
private boolean isImageFile(String filePath) {
if (filePath.endsWith(".jpg") || filePath.endsWith(".png"))
// Add other formats as desired
{
return true;
}
return false;
}
/**
* This can be used to filter files.
*/
private class ImageFileFilter implements FileFilter {
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
else if (isImageFile(file.getAbsolutePath())) {
return true;
}
return false;
}
}
public class MyGridAdapter extends BaseAdapter {
LayoutInflater inflater;
List < GridViewItem > items;
private Context mContext;
public MyGridAdapter(Context context, List < GridViewItem > items) {
mContext = context;
this.items = items;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_item, null);
}
TextView text = (TextView) convertView.findViewById(R.id.textView);
text.setText(items.get(position).getPath());
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
Bitmap image = items.get(position).getImage();
if (image != null) {
imageView.setImageBitmap(image);
} else {
// If no image is provided, display a folder icon.
imageView.setImageResource(R.drawable.ic_folder_grey_24dp);
}
return convertView;
}
}
公共类MyGridAdapter扩展了BaseAdapter{
充气机;
列出项目;
私有上下文;
公共MyGridAdapter(上下文,列表items){
mContext=上下文;
这个项目=项目;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.grid_项,空);
}
TextView text=(TextView)convertView.findViewById(R.id.TextView);
text.setText(items.get(position.getPath());
ImageView ImageView=(ImageView)convertView.findViewById(R.id.ImageView);
位图图像=items.get(position.getImage();
如果(图像!=null){
设置图像位图(图像);
}否则{
//如果未提供图像,则显示文件夹图标。
imageView.setImageResource(R.drawable.ic\u folder\u grey\u 24dp);
}
返回视图;
}
}
我只想在数组长度大于零时列出文件。我不知道在哪里检查。如果您尝试在
null
数组上迭代,则增强的for
循环将失败。因此,这里的一个选择就是检查这种可能性和它
@Override
public int getCount() {
if(item.size == 0) {
Log.d("List Size :", "List is empty");
//If you want to toast message accepts context in your constructor
//Then toast message
}
return items.size();
}