2016-04-22 6 views
2

Я пытаюсь использовать метод для создания растрового изображения из макетов и сохранения растрового изображения в файл во внутренней памяти. Однако getApplicationContext() не разрешен.getApplicationContext() не может быть разрешен

Вот код для метода

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

Used некоторой помощи от кодов StackOverflow для создания этого метода. Даже после чтения связанных запросов на getApplicationContext(), я не могу найти проблему. Любая помощь будет очень ценна

EDIT: Забыл упомянуть, что метод generateAndSaveBitmap(View layout) определяется в отдельный класс

С уважением

+0

'getApplicationContext()' это метод в 'Context'. Является ли ваш класс «Контекстом» каким-то прямым или косвенным образом? –

+0

при использовании buildDrawingCache(); вам также нужно уничтожить его после его использования. – user3802077

+0

@ user3802077 спасибо за это. Добавлено в код – Traveller

ответ

2

Шаг №1: Удалить ContextWrapper cw = new ContextWrapper(getApplicationContext());, так как он вам не нужен.

Шаг № 2: Заменить cw.getDir("imageDir", Context.MODE_PRIVATE); с layout.getContext().getDir("imageDir", Context.MODE_PRIVATE);

Кроме того, перенесите этот диск I/O в фоновом потоке.

+0

Спасибо, что остался в фоновом потоке. Забыл об этом. – Traveller

2

Try,

ContextWrapper cw = new ContextWrapper(getActivity()); 

упаковывают это фрагмент.

+0

Уже наткнулся на getActivity(). Но нет. Это не фрагмент. Спасибо – Traveller

0

Вы пробовали:

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

Теперь из обработки изображений в записи файла в каталоге все должно быть сделано от нити. Инкапсулируйте его в AsyncTask, когда это возможно, и внутри него примените метод generateAndSaveBitmap().

Смежные вопросы