1

У меня есть система онлайн-заказов, где пользователи могут выполнить заказ, по крайней мере, тремя шагами. Каждый шаг ниже, является отдельным видом деятельности:Передача значения от первой активности до третьей активности через AsyncTask

  1. выбор сделать из плана
  2. Выберите даты начала
  3. Выбор содержимого на основе выбранного плана на шаге 1.

Теперь то, что я сделал на шаге 1, как только пользователь нажимает на план и порядок, ниже код работает onClick.

Intent intent = new Intent(context, SelectDate.class); 

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Bundle extras = new Bundle(); 

extras.putString("pass_selected_meal_plan_id",mp_id_pass); 
extras.putString("pass_selected_meal_name",mp_name_display); 

intent.putExtras(extras); 

context.startActivity(intent); 

Toast.makeText(context, mp_name_display+" Selected", 
Toast.LENGTH_SHORT).show(); 

Нет во второй операции, я прошу пользователя выбрать дату начала заказа. Это также достаточно просто и не имеет проблем. Но проблема начинается, когда я пытаюсь перейти к третьему действию.

Поскольку мое третье содержание активности зависит от выбора Плана, сделанного в первом действии, поэтому я должен перенести выбранный ID в третье действие. У меня это в Extra Bundle во втором действии как «pass_selected_meal_plan_id».

То, как я загружаю третью деятельность, также имеет решающее значение. Существует два возможных способа запуска третьего действия. Сначала очень просто, положив onClick на следующую кнопку. Я предполагаю, что будет очень просто передать необходимый выбор. Но в этом случае, насколько я знаю, будучи новичком в Android App Development, мне нужно будет нажать кнопку и загрузить контент на основе выбранного Плана.

Второй способ - это то, что я хочу использовать. Я запускаю AsyncTask во втором действии onClick Next. Он работает отлично. Единственное, что я не могу получитьExtras в onPostExecute из предыдущего действия, то есть первого действия.

Я открыт даже для использования глобальных переменных, но не знаю, как это сделать. Зная, что такое глобальные переменные, я не слишком хочу их использовать.

Вот мой onPostExecute код:

@Override 
protected void onPostExecute(String result) { 
    Intent intent = new Intent(ctx, SelectMeals.class); 

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    Bundle extras = new Bundle(); 

    //Instead of "1" I want the value from previous Activity, which already available in Extras from previous Activity 
    extras.putString("pass_selected_meal_plan_id", "1"); 

    //This is the second value I want to be transferred from first activity to the third activity 
    extras.putString("pass_selected_meal_name","Test"); 

    intent.putExtras(extras); 

    ctx.startActivity(intent); 
} 

бы очень признателен, если кто-то может помочь.

+0

Вы сказали, что второе действие имеет идентификатор в пакете, обеспечиваемом первым действием. Что на самом деле удерживает вас? Вы не можете получить id из комплекта? – fluffyBatman

+0

Благодарим вас за быстрый ответ. Проблема в том, что я не могу получить значение в onPostExecute, поскольку там определены дополнительные функции для следующего действия. Если я передам его без AsyncTask, он работает отлично. Другими словами, решение этой проблемы может заключаться в назначении getExtras из предыдущей активности в puExtras в onPostExecute. –

ответ

2

Вы можете использовать ниже код

В вашей второй активности

// declare global variables 

String id; 
String name; 

Используйте ниже код внутри onCreate

Bundle bundle = getIntent().getExtras(); 

//Extract the data… 
id = bundle.getString("pass_selected_meal_plan_id"); 
name = bundle.getString("pass_selected_meal_name"); 

Сейчас в вашем AsyncTask, написать следующий код перед запуском 3-й активности.

@Override 
protected void onPostExecute(String result) { 
    Intent intent = new Intent(ctx, SelectMeals.class); 

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    Bundle extras = new Bundle();   
    extras.putString("pass_selected_meal_plan_id",id); // first activity data 
    extras.putString("pass_selected_meal_name",name); // first activity data 
    intent.putExtras(extras); 

    ctx.startActivity(intent); 
} 

Наконец, вы можете получить эти значения в третьем действии.

Одним из важных моментов, которые я хотел бы подчеркнуть, является то, что избегайте использования имен общих переменных, например. Я бы. Он используется только для справки в этом ответе, но это не очень хорошая идея. Одна очевидная проблема, с которой вы можете столкнуться, - это Refactor> Rename. Он изменит даже @ + id в файлах XML.

+0

Благодарим вас за быстрый ответ. У меня такое чувство, что это может сработать. Единственное, на что мне нужно руководство, - это объявить глобальные переменные. На самом деле я новичок в этом, поэтому мне нужны рекомендации. Еще раз спасибо ... –

+0

Большое спасибо брату. Это действительно помогло. Я также вычислил глобальную переменную. Очень ценю ... –

+0

приветственный брат –

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