Насколько я знаю, изображение можно преобразовать в строку base64 либо с помощью FileReader (), либо сохранить его в элементе canvas, а затем использовать toDataURL () для получения изображения. У меня была похожая проблема, на которую вы можете ссылаться.
Самым простым способом сделать это было бы передать идентификатор сеанса в Intent
, который вы используете для начала деятельности:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
Доступ, который предназначен для следующей деятельности:
String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");
В docs для Намерений есть больше информации (смотрите раздел под названием "Дополнения").
/*
* If you are from transferring data from one class that doesn't
* extend Activity, then you need to do something like this.
*/
public class abc {
Context context;
public abc(Context context) {
this.context = context;
}
public void something() {
context.startactivity(new Intent(context, anyone.class).putextra("key", value));
}
}
Вы можете отправлять данные между действиями, используя объект намерения. Представьте, что у вас есть два вида деятельности, а именно FirstActivity
и SecondActivity
.
Inside FirstActivity:
Использование Intent:
i = new Intent(FirstActivity.this,SecondActivity.class);
i.putExtra("key", value);
startActivity(i)
Inside SecondActivity
Bundle bundle= getIntent().getExtras();
Теперь вы можете использовать различные методы класса комплектов для получения значений, переданных из FirstActivity путем Ключ.
например. bundle.getString("key")
, bundle.getDouble("key")
, bundle.getInt("key")
и т. Д.
В вашей текущей деятельности создайте новую Intent
:
String value="Hello world";
Intent i = new Intent(CurrentActivity.this, NewActivity.class);
i.putExtra("key",value);
startActivity(i);
Затем в новой активности получите эти значения:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("key");
//The key argument here must match that used in the other activity
}
Используйте эту технику для передачи переменных из одно занятие другому.
Постарайтесь сделать следующее:
Создать простой «помощник» класса (завод для ваших намерений), как это:
import android.content.Intent;
public class IntentHelper {
public static final Intent createYourSpecialIntent(Intent src) {
return new Intent("YourSpecialIntent").addCategory("YourSpecialCategory").putExtras(src);
}
}
Это будет завод для всех ваших намерений. Каждый раз, когда вам нужно новое намерение, создать статический фабричный метод в Intenthelper. Чтобы создать новую цель, вы должны просто сказать, что это так:
IntentHelper.createYourSpecialIntent(getIntent());
в вашей деятельности. Когда вы хотите «сохранить» некоторые данные в «сеансе», просто используйте следующее:
IntentHelper.createYourSpecialIntent(getIntent()).putExtra("YOUR_FIELD_NAME", fieldValueToSave);
и отправьте это намерение. В целевой активности Ваше поле будет доступно как:
getIntent().getStringExtra("YOUR_FIELD_NAME");
, поэтому теперь мы можем использовать намерение, как одинаковую старую сеанс (например, в сервлетах или JSP ).
Прохождение Намерение является хорошим подходом, как отметил Эрих.
Объект Application - это другой путь, и иногда он проще, когда имеешь дело с одним и тем же состоянием при множественных действиях (в отличие от того, чтобы получать/выводить его везде), или объектами более сложными, чем примитивы и строки.
Вы можете расширить Приложение, а затем установить/записать все, что хотите, и получить доступ к нему из любой Активности (в одном и том же приложении) с помощью getApplication().
Также имейте в виду, что другие подходы, которые вы видите, например, статика, могут быть проблематичными, так как они могут привести к утечке памяти. Приложение также помогает решить эту проблему.
Можно работать с намерением
String sessionId = "my session id";
startActivity(new Intent(getApplicationContext(),SignOutActivity.class).putExtra("sessionId",sessionId));