Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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 在Android中初始化之前访问类对象_Java_Android - Fatal编程技术网

Java 在Android中初始化之前访问类对象

Java 在Android中初始化之前访问类对象,java,android,Java,Android,我有一个名为ItemsAdapter的类,其中我有三个参数,我正在另一个名为ItemsActivity的类中实例化这个类。执行此操作时,我需要设置所有三个参数,最后一个参数是我要传递一个名为getImages()的方法,该方法位于同一个类ItemsAdapter中。我只能通过使用ItemsAdapter对象来访问它,但这是不可行的。这就是我尝试过的: 代码: ItemsAdapter mAdapter = null; ArrayList<String> image_items = m

我有一个名为ItemsAdapter的类,其中我有三个参数,我正在另一个名为ItemsActivity的类中实例化这个类。执行此操作时,我需要设置所有三个参数,最后一个参数是我要传递一个名为getImages()的方法,该方法位于同一个类ItemsAdapter中。我只能通过使用ItemsAdapter对象来访问它,但这是不可行的。这就是我尝试过的:

代码:

ItemsAdapter mAdapter = null;
ArrayList<String> image_items = mAdapter.getImages(); 
mAdapter = new ItemsAdapter(this,R.layout.item,image_items);
public ArrayList<String> getImages()
    {
        String path = android.os.Environment.getExternalStorageDirectory() + "/Pictures/SanPics2/";
        File mainfolder = new File(path);
        ArrayList<String> files = new ArrayList<String>();
        if(mainfolder.listFiles() == null)
        return null;
        for(File f : mainfolder.listFiles())
        {
            if(f.getName().contains(".jpg"))
            {
                files.add(f.getAbsolutePath());
            }
        }
        return files;
    }
ItemsAdapter mAdapter=null;
ArrayList image_items=mAdapter.getImages();
mAdapter=newitemsadapter(这个,R.layout.item,image\u items);
更新:

ItemsAdapter mAdapter = null;
ArrayList<String> image_items = mAdapter.getImages(); 
mAdapter = new ItemsAdapter(this,R.layout.item,image_items);
public ArrayList<String> getImages()
    {
        String path = android.os.Environment.getExternalStorageDirectory() + "/Pictures/SanPics2/";
        File mainfolder = new File(path);
        ArrayList<String> files = new ArrayList<String>();
        if(mainfolder.listFiles() == null)
        return null;
        for(File f : mainfolder.listFiles())
        {
            if(f.getName().contains(".jpg"))
            {
                files.add(f.getAbsolutePath());
            }
        }
        return files;
    }
public ArrayList getImages()
{
String path=android.os.Environment.getExternalStorageDirectory()+“/Pictures/SanPics2/”;
File mainfolder=新文件(路径);
ArrayList files=新的ArrayList();
if(mainfolder.listFiles()==null)
返回null;
对于(文件f:mainfolder.listFiles())
{
如果(f.getName()包含(“.jpg”))
{
添加(f.getAbsolutePath());
}
}
归还文件;
}
这就是我正在尝试访问的方法。
它会按预期抛出NullPointerException。有没有其他方法可以访问ItemsAdapter类中的getImages()方法。抱歉,如果问题是愚蠢的(我知道它是),但我只是一个初学者的编程和东西。任何关于如何实现这一目标的想法都将受到高度赞赏。提前谢谢

我建议您将此代码放在
Activtiy
而不是适配器类中

public ArrayList<String> getImages()
    {
        String path = android.os.Environment.getExternalStorageDirectory() + "/Pictures/SanPics2/";
        File mainfolder = new File(path);
        ArrayList<String> files = new ArrayList<String>();
        if(mainfolder.listFiles() == null)
        return null;
        for(File f : mainfolder.listFiles())
        {
            if(f.getName().contains(".jpg"))
            {
                files.add(f.getAbsolutePath());
            }
        }
        return files;
    }
然后


如果必须从适配器绘制图像,为什么不更改构造函数并为图像添加setMethod呢?像这样

ItemsAdapter mAdapter = new ItemsAdapter(this,R.layout.item);
ArrayList<String> image_items = mAdapter.getImages(); 
mAdapter.setImages(image_items);
将方法设为静态并使用类名调用它

并将此方法调用到与

mAdapter = new ItemsAdapter(this,R.layout.item, getImages());

为什么您的适配器持有getImages调用?它的用途是什么?哪里是
getImages
?。它返回什么?@raghundan getImages()返回SDCard中某个位置的图像列表,该列表位于ItemsAdapter类中。使用前应初始化适配器。它不是初始化的ImageAdapter可以确定图像本身,无需将它们放入构造函数。所以getter将其放入setter?看起来很奇怪。只需在适配器内部使用getter就可以了。是的,我只需要在适配器本身中执行所有这些操作。他应该使用带有两个File参数的构造函数。构造函数依次使用文件。Separator@Raghunandan那是行不通的。它会抛出NullPointerException。@Raghunandan谢谢你的努力,但我已经接受了一个答案,这是最简单的答案。@San很好。但只要你做得对,这个方法也行。@Raghunandan我只是好奇,想知道。我将getImages()放在实例化ItemsAdapter的同一个活动中,那么为什么我需要ItemsAdapter对象访问该方法呢。我试过以下方法,效果很好。ArrayList image_items=getImages()就是我所做的。我不明白你为什么要给出ArrayList image\u items=mAdapter.getImages(),如果getImages()在同一个类中,它根本不起作用。我请求您编辑您的答案。非常感谢。简单明了的回答。值得投票表决。
public ItemsAdapter(Context context, int layout) {
   //some super call
   //some work
   this.images = getImages();
}
public static ArrayList<String> getImages()
    {
        String path = android.os.Environment.getExternalStorageDirectory() + "/Pictures/SanPics2/";
        File mainfolder = new File(path);
        ArrayList<String> files = new ArrayList<String>();
        if(mainfolder.listFiles() == null)
        return null;
        for(File f : mainfolder.listFiles())
        {
            if(f.getName().contains(".jpg"))
            {
                files.add(f.getAbsolutePath());
            }
        }
        return files;
    }
ArrayList<String> image_items = ItemsAdapter.getImages(); 
private ArrayList<String> getImages() {....} // Same as you posted into question, but public changed to private.
mAdapter = new ItemsAdapter(this,R.layout.item, getImages());