2012-04-09 3 views
0

Моя работа поток выглядит следующим образом:передать данные от одного вида деятельности к другому, но перейти к другой деятельности, позже

LoginActivity -> ActivityB -> ActivityC -> ActivityD

Я хотел бы передать данные от LoginActivity до ActivityD, но не перейдите непосредственно в ActivityD. т.е. я хотел бы передать данные из LoginActivity в ActivityD, но перейдите в ActivityB и ActivityC, прежде чем я перейду в ActivityD и получаю там данные.

Возможно ли это?

Я знаю, что для передачи данных от одного вида деятельности на другой код выглядит следующим образом:

 Intent i = new Intent(getApplicationContext(), AnotherActivity.class); 
     i.putExtra("key", (int)1); 
     i.putExtra("something", something); 
     startActivity(i); 

И в AnotherActivity вы следующее, чтобы получить данные:

 Bundle extras = getIntent().getExtras(); 
     if(extras !=null) 
     { 
      String var = extras.getString("something"); 
     } 

Но это не работа, если я хочу отложить движение прямо к деятельности. Поэтому, если я выберу startActivity(i); и перейду к другому мероприятию. Программа вылетает, когда tyring получает данные в конечном действии. Появится старый добрый NullPointerExeption.

Кто-нибудь знает способ сделать то, что я описал? Получать данные из одной активности в другую, но не сразу (или начинать) эту деятельность?

ответ

2

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

SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("key", (int)1); 
editor.putString("something", something); 
editor.commit(); 

в момент получения:

SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE); 
String something = prefs.getString("something", null); 
+0

Отлично. Спасибо за помощь ... она сделала именно то, что мне нужно. Каждый день я узнаю что-то новое о Android. – Zolt

0

Вы всегда можете использовать любой из них для него

•A singleton pattern to share the date across multiple non-consecutive activities. 

•A shared preference. 

•An external storage 

•Entry into db. 

•passing data with intents. 

Это link даст вам некоторые подробности.

0

Я могу придумать два варианта решения вашей проблемы. Во-первых, вы просто держать передавая данные, что означает, в ACtivityB и ACtivityC вам нужно запустить код

Intent i = new Intent(getApplicationContext(), AnotherActivity.class); 
i.putExtra("key", (int)1); 
i.putExtra("something", something); 
startActivity(i); 

Другой вариант (который я считаю более практичным) должен создать отдельный класс со статическими членами и статические методы для доступа к данным. Это может выглядеть как этот

public class SharedResource{ 
public static String mPassedName; 
} 

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

0

Вы можете сделать это с помощью двух подходов. 1) Общие предпочтения

SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("key", "Value"); 
editor.commit(); 

// выборка Shared прив.

String value = pref.getString("key" , ""); 

2) Определение класса уровня приложения и доступа к нему.

Класс Состоит из функций геттера и сеттера для переменных. установка в одном действии и попадание в другую деятельность.

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