2012-02-13 9 views
0

ディレクトリとそのファイルを認識するための他のアクティビティを取得するにはどうすればよいですか?他のアクティビティや関数でも名前で名前を参照しようとすると、コードはコンパイルされません。私はディレクトリやそのファイルのコピーを作成したくないので、私はファイルパスだけを望んでいません。このようなものを資産やレスキューツリーに含める必要がありますか?もしそうなら、どうしたらいいですか?私は今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]); 

} 






} 

}

+0

コンパイルできない場合は、他の問題があります。コンパイルエラーは何ですか? – Argyle

+0

ディレクトリ変数を解決できないということだけです。私は別のクラスのディレクトリでクラスのインスタンスを作成しようとしましたが、そのようにアクセスしましたが、今では受信者アクティビティを開始しようとすると例外が発生します。 – HigginsValhalla

答えて

0

あなたはActivityの独自のインスタンスを作成するべきではありません。ライフサイクルメソッドは、アクティビティとサービスが破壊されて作成されるため、特定の時間にOSによって呼び出されます。 newを呼び出してPicturetakerActivityを作成したため、そのonCreate()コードは発生していません。これをしないでください。

あなたのアプリのSharedPreferencesまたはSQLiteデータベース内のディレクトリの名前を保持するか、必要に応じてアプリでグローバル値を保持するだけのスタティックシングルトンレジストリを保持することをお勧めします。ディレクトリ名が決して変更されない場合は、それを静的な最終定数にすることさえできます。

+0

ありがとう、これは役立ちます – HigginsValhalla

関連する問題