全局识别创建的目录和文件

时间:2012-02-13 04:36:42

标签: android

如何让其他活动识别目录及其文件?如果我尝试在其他活动甚至函数中通过名称引用它们,代码将无法编译。我不想制作目录或其文件的副本,因此我不想只是文件路径。我是否需要在资产或资源树中包含这些内容?如果是这样,我该怎么做?我现在声明oncreate函数之外的目录,并尝试将活动的实例与其他活动中的文件一起使用,以便它可以作为成员访问该文件。这不起作用,因为我得到一个例外。我已经包含了下面其他活动的代码。

//outside oncreate

public File newdir=null;

// inside oncreate

File sdc=Environment.getExternalStorageDirectory();

    String faceplace = "faceplace";

     newdir = new File(sdc,faceplace);  

    if (!newdir.exists())
    {

        newdir.mkdirs();
    }


    Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    String facename = "face" + n + ".jpg";

    File picfile = new File (newdir,facename);

以下是我尝试识别newdir的活动代码。如果我只是使用变量,它说它无法解决它。如果我尝试创建上一个类的实例(我在下面执行),则活动将无法启动。调试器说“无法启动活动ComponentInfo {senior.sem / senior.sem.facerec}:java.lang.NullPointerException。”

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.facerec);

     ImageView imageView2 = (ImageView)findViewById(R.id.imageView2);


 PicturetakerActivity pictake = new PicturetakerActivity();



File newdir = pictake.newdir;
File[] farray = newdir.listFiles();


int size =farray.length;

 Bitmap[] gallery= new Bitmap[size];



for (int i = 0; i < size; i++)
{

     try { 

         FileInputStream in = new FileInputStream(farray[i]); 

         Bitmap face = null;

         face = BitmapFactory.decodeFile(farray[i].getAbsolutePath());

         gallery[i]=face;

    } catch (Exception e) { 
          // e.printStackTrace(); 
    }        

    imageView2.setImageBitmap(gallery[i]);

}






}

}

1 个答案:

答案 0 :(得分:0)

您不应该创建自己的Activity实例。生命周期方法在特定时间由OS调用,因为活动和服务被创建为销毁。由于您通过调用PicturetakerActivity创建了new,因此其onCreate()代码从未发生过。不要这样做。

更好的方法是在应用程序的SharedPreferences或SQLite数据库中保留目录的名称,或者甚至是根据您的需要在应用程序中保存全局值的静态单例注册表。如果目录名永远不会改变,你甚至可以在某个地方使它成为静态最终常量。