Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 无法确定在何处检查长度数组_Java_Android - Fatal编程技术网

Java 无法确定在何处检查长度数组

Java 无法确定在何处检查长度数组,java,android,Java,Android,我知道什么是空指针异常,但我的问题是我不知道如何处理它,并在下面的代码中给用户一个toast消息,告诉用户列表为空。我正在为我的应用程序创建一个图像库,并指定系统将所有文件和文件夹加载到Android应用程序的路径 当路径中没有文件或文件夹时,应用程序崩溃,原因是: Attempting to invoke length on a null array. GalleryFragment.java @Nullable @Override public View onCreateView(Layo

我知道什么是空指针异常,但我的问题是我不知道如何处理它,并在下面的代码中给用户一个toast消息,告诉用户列表为空。我正在为我的应用程序创建一个图像库,并指定系统将所有文件和文件夹加载到Android应用程序的路径

当路径中没有文件或文件夹时,应用程序崩溃,原因是:

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();
}