2015-04-19 5 views
1

Я внедряю LoginActivity, регистрируя новую учетную запись онлайн. После входа в систему или регистрации я начинаю новый замысел и попытаться передать новые данные учетной записи обратно в MainActivity:Передача намерений от деятельности

Toast.makeText(context,"SUCCESS",Toast.LENGTH_LONG).show(); 
    finish(); 
    Intent myIntent = new Intent(LoginActivity.this, MainActivity.class); 
     myIntent.putExtra("username",mUsername); 
     myIntent.putExtra("email",mEmail);     
    LoginActivity.this.startActivity(myIntent); 

Идея заключается в том, что я хочу, чтобы получить данные в MainActivity, так что я могу добавить имя пользователя и адрес электронной почты в заголовок навигационного ящика. Внутри MainActivity У меня есть следующие поля:

public class MainActivity extends ActionBarActivity{ 
    String NAME = "Sign in"; 
    String EMAIL = ""; 

    //... ... ... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    //... ... ... 

    Intent intent = getIntent(); 
    if(intent.getStringExtra("username")!=null){ 
     setAccount(intent); 
    } 
    firstTime(); 
    } 
    public void setAccount(Intent intent){ 
     NAME = intent.getStringExtra("username"); 
     EMAIL = intent.getStringExtra("email"); 
    } 
}  

}

, но после того, как я Вход/регистрация намерение не возвращает мои данные обратно в MainActivity ...

В чем проблема?

* *** EDIT * ***

Я реализовал это:

Intent intent = new Intent(this, LoginActivity.class); 
startActivityForResult(intent, PICK_ACCOUNT_REQUEST); 

вместо

startActivity(new Intent(this, LoginActivity.class)); 
finish(); 

В LoginActivity внутри onPostExecute() (я использую AsyncTask):

Intent myIntent = new Intent(LoginActivity.this, MainActivity.class); 
finish(); 
myIntent.putExtra("username",mUsername); 
myIntent.putExtra("email",mEmail) 
setResult(1, myIntent); 
LoginActivity.this.startActivity(myIntent); 

и снова внутри MainActivity Я применил метод onActivityResult(), но когда он будет выполнен, полученный результат равен Intent data. что случилось с моим кодом?

* EDIT2 *

Я решил его удалением LoginActivity.this.startActivity(myIntent) как предложено @lqbal:

Intent returnIntent = new Intent(); 
returnIntent.putExtra("username",mUsername); 
returnIntent.putExtra("email",mEmail); 
setResult(RESULT_OK,returnIntent); 
finish(); 

Но там лежит еще одна проблема: в методе onActivityResult() я стараюсь присваивать полученные данные полям класса без успеха. Подробнее см. Ниже.

В начале MainActivity класса I назначить две переменные:

String NAME = "Sign in", EMAIL = ""; 

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

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    // Check which request we're responding to 
    if (requestCode == PICK_ACCOUNT_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      // The user picked a contact. 
      String usr = data.getStringExtra("username"); 
      String mal = data.getStringExtra("email"); 
      this.NAME = usr;this.EMAIL=mal; 
     } 
    } 
} 

без успеха, в факт после завершения LoginActivity Я все еще визуализую старые значения. Зачем?

+3

Если 'LoginActivity' запускается из' MainActivity', вы должны использовать 'startActivityForResult()' и использовать 'setResult (int, Bundle)' метод в 'LoginActivity'. – EpicPandaForce

ответ

1

Использование startActivityForResult();, чтобы начать свою деятельность, чтобы получить результаты от начатой ​​деятельности назад к исходной активности.

Edit: Следуйте за этим, он должен исправить ваш вопрос

Intent returnIntent = new Intent(); 
returnIntent.putExtra("username",mUsername); 
returnIntent.putExtra("email",mEmail); 
setResult(RESULT_OK,returnIntent); 
finish(); 

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

+0

В моем коде должна быть ошибка. Проверьте мое редактирование –

+0

Переместите метод finish() после всех операций намерения, он должен исправить вашу проблему. Если да, то отметьте мой ответ как принятый. – Iqbal

+1

Просто заметил ваш код. Удалить LoginActivity.this.startActivity (myIntent); из вашего отредактированного кода, тогда он будет работать. Поскольку вы начали активность для результата, вам не нужно снова запускать активность. Просто завершите работу и верните результат в начальную операцию onActivityResult(). Если это сработает, тогда примите мой ответ. – Iqbal

1

поставил finish(); после startActivity()