Как передать данные между действиями в приложении Android?

Насколько я знаю, изображение можно преобразовать в строку base64 либо с помощью FileReader (), либо сохранить его в элементе canvas, а затем использовать toDataURL () для получения изображения. У меня была похожая проблема, на которую вы можете ссылаться.

Преобразование изображения в холст, который уже загружен

1245
задан Thunder 23 July 2018 в 11:38
поделиться

7 ответов

Самым простым способом сделать это было бы передать идентификатор сеанса в Intent, который вы используете для начала деятельности:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);

Доступ, который предназначен для следующей деятельности:

String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");

В docs для Намерений есть больше информации (смотрите раздел под названием "Дополнения").

1217
ответ дан 19 December 2019 в 20:16
поделиться
/*
 * 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));
    }
}
4
ответ дан Oleg Vaskevich 23 July 2018 в 11:38
поделиться

Вы можете отправлять данные между действиями, используя объект намерения. Представьте, что у вас есть два вида деятельности, а именно 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") и т. Д.

11
ответ дан Raceimaztion 23 July 2018 в 11:38
поделиться

В вашей текущей деятельности создайте новую 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
}

Используйте эту технику для передачи переменных из одно занятие другому.

1376
ответ дан ADM 23 July 2018 в 11:38
поделиться
-- 2404313-

Постарайтесь сделать следующее:

Создать простой «помощник» класса (завод для ваших намерений), как это:

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 ).

38
ответ дан 19 December 2019 в 20:16
поделиться

Прохождение Намерение является хорошим подходом, как отметил Эрих.

Объект Application - это другой путь, и иногда он проще, когда имеешь дело с одним и тем же состоянием при множественных действиях (в отличие от того, чтобы получать/выводить его везде), или объектами более сложными, чем примитивы и строки.

Вы можете расширить Приложение, а затем установить/записать все, что хотите, и получить доступ к нему из любой Активности (в одном и том же приложении) с помощью getApplication().

Также имейте в виду, что другие подходы, которые вы видите, например, статика, могут быть проблематичными, так как они могут привести к утечке памяти. Приложение также помогает решить эту проблему.

138
ответ дан 19 December 2019 в 20:16
поделиться

Можно работать с намерением

String sessionId = "my session id";

    startActivity(new Intent(getApplicationContext(),SignOutActivity.class).putExtra("sessionId",sessionId));
0
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: