Как экспортировать подвид фрагмента из другого фрагмента в виде Png?Экспорт подзаголовка фрагмента из другого фрагмента как Png
Контекст
I'am создания приложения, которое позволяет пользователю создавать персонализированные резюме. Пользователь может предоставить информацию о своем опыте работы и навыках. В результате пользователь может экспортировать свои результаты в виде png и сохранить его на устройстве. Мой вопрос направлен на экспорт-функциональность приложения.
Что я получил до сих пор
Я попытался объединить несколько ответов от сайта, чтобы получить результат, но, к сожалению, код, который у меня есть не работает до сих пор.
public void export(Context context) throws FileNotFoundException {
View exportView = getLayoutInflater(getArguments()).inflate(R.layout.fragment_form, null, false);
RelativeLayout subView = (RelativeLayout) exportView.findViewById(R.id.fragment_form_container_root);
try {
subView.setDrawingCacheEnabled(true);
subView.measure(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(subView.getDrawingCache(), 0, 0, subView.getMeasuredWidth(), subView.getMeasuredHeight());
File cachePath = new File(context.getCacheDir(), "images");
cachePath.mkdirs(); // don't forget to make the directory
FileOutputStream stream = new FileOutputStream(cachePath + "/image.png"); // overwrites this image every time
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
File imagePath = new File(context.getCacheDir(), "images");
File newFile = new File(imagePath, "image.png");
Uri contentUri = FileProvider.getUriForFile(context, "com.example.lukas.masterthesis.fileprovider", newFile);
if (contentUri != null) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file
shareIntent.setDataAndType(contentUri, getActivity().getContentResolver().getType(contentUri));
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivity(Intent.createChooser(shareIntent, "Choose an app"));
}
}
Функциональность export вызывается внутри фрагмента A после события click. Я пытаюсь получить требуемое представление в Fragment B (похоже, что работает), но создание Bitmap всегда приводит к нулевому объекту. Поэтому процедура терпит неудачу.
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null
Честно говоря им даже не уверен, что это правильный способ сделать такую вещь, так как я не нашел решение Лучшей практики для того, что пытается им. Если нет, знает ли кто-нибудь лучший способ сделать это?
Если это «нормально» решение, знает ли кто-нибудь, как заставить мой код работать или есть предложения, которые могут указывать на меня в правильном направлении?
Thx заранее.
Это не имеет никакого эффекта, только сообщение об ошибке меняется: java.lang.NullPointerException: Попытка вызвать виртуальный метод 'INT android.graphics.Bitmap.getWidth()' по ссылке на нулевой объект – luQ