2016-04-22 52 views
2

レイアウトからビットマップを生成し、ビットマップを内部メモリのファイルに保存する方法を使用しようとしています。ただし、getApplicationContext()は解決されません。ここで getApplicationContext()を解決できません

は、このメソッドを生成するために、StackOverflowのコードからいくつかの助けを使用した方法

private void generateAndSaveBitmap(View layout) { 
//Generate bitmap 
     layout.setDrawingCacheEnabled(true); 
     layout.buildDrawingCache(); 
     Bitmap imageToSave = layout.getDrawingCache(); 

//Create a file and path 
     ContextWrapper cw = new ContextWrapper(getApplicationContext()); 
     File directory = cw.getDir("imageDir", Context.MODE_PRIVATE); 
     File fileName = new File(directory, "sharableImage.jpg"); 
     if (fileName.exists()) 
      fileName.delete(); 

//Compress and save bitmap under the mentioned fileName 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(fileName); 
      imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (fos != null) { 
       try { 
        fos.flush(); 
        fos.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
// return directory.getAbsolutePath(); 
    } 

ためのコードです。 getApplicationContext()で関連するクエリを読んだ後でも、問題を見つけることができません。すべてのヘルプは本当に

EDITをいただければ幸いです。

よろしく

+0

'getApplicationContext()'は 'Context'のメソッドです。あなたのクラスは、直接的または間接的に「文脈」の範囲を広げていますか? buildDrawingCache()を使用する場合は –

+0

です。あなたはまたそれを使用した後にそれを破壊する必要があります – user3802077

+0

@ user3802077ポイントのおかげで。コードに追加 – Traveller

答えて

2

ステップ1:必要がないので、ContextWrapper cw = new ContextWrapper(getApplicationContext());を削除します。

ステップ#2:またlayout.getContext().getDir("imageDir", Context.MODE_PRIVATE);

cw.getDir("imageDir", Context.MODE_PRIVATE);を交換し、バックグラウンドスレッドに、このディスクI/Oを移動してください。

File dir = getApplicationContext().getDir(Environment.DIRECTORY_PICTURES, Context.MODE_PRIVATE); 

を、画像処理のすべてがスレッドをオフに行われるべきであるディレクトリにファイルの書き込みに:

+0

バックグラウンドスレッドについて残っていただきありがとうございます。それを忘れてしまった。 – Traveller

2

は、try、

ContextWrapper cw = new ContextWrapper(getActivity()); 

を包み、それはフラグメントのメソッドgenerateAndSaveBitmap(View layout)が別のクラス内で定義されていることを、言及を忘れていました。

+0

既にgetActivity()に出くわしました。しかし、いいえ。これは断片ではありません。おかげで – Traveller

0

は、あなたがしようとしています。可能であればAsyncTaskでカプセル化し、その内部でgenerateAndSaveBitmap()メソッドを移動します。

関連する問題