ответ

1

Каков наилучший способ получить строковое значение в активности A и сохранить его активность B?

Это зависит от того, что вы подразумеваете под «сохранить его активность B»

Если вы просто хотите, чтобы «передать» его B и использовать его там, то просто отправить в Intent

Intent i = new Intent(..., ...); 
i.putExtra("someKey", someString); 
startActivity(i); 

и получить его в B (не раньше onCreate()) с чем-то вроде

Intent intent = getIntent(); 
String foo = intent.getStringExtra("someKey"); 

Если вы хотите, чтобы он действительно сохранялся, тогда SharedPreferences было бы хорошо. В документах есть хороший пример.

Intent Docs

SharePreferences

+0

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

+0

Посмотрите на пример «SharedPreferences», с которым я связан , Вам просто нужно открыть префы и получить его оттуда, и вы можете использовать его в своем «TextView» – codeMagic

+0

, может привести мне пример? –

1

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

http://www.doepiccoding.com/blog/?p=153

В принципе, есть:

-shared Предпочтения

-Intent Дополнительно

-Применение Подкласс

-SQLite Database

Все они ехр подробно подробно ...

С уважением!

+0

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

+0

Есть настройки «Частные для активности» и " Глобальный стандарт по умолчанию ", убедитесь, что вы используете тот, у которого есть весь охват приложения, в сообщении указано, что проблема подробно ... –

1

Вы можете хранить разные значения в своих намерениях.Вот официальный Пример Google: Google

Намерение

В деятельности A:

public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";  

Intent intent = new Intent(this, ActivityB.class); 
String message = "Your String"; 
intent.putExtra(EXTRA_MESSAGE, message); 
startActivity(intent); 

И в деятельности B:

Intent intent = getIntent(); 
String message = intent.getStringExtra(ActivityA.EXTRA_MESSAGE); 

Shared Preferences

В деятельности A:

private static final String PREV_STRING_VALUE = "prevStringValue"; 

String value = "yourString"; 
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
sp.edit().putString(PREV_STRING_VALUE, value).apply(); 

И в деятельности B:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
String value = sp.getString(ActivityA.PREV_STRING_VALUE, "DefaultValue"); 

Или некоторые другие подходы:

  • SQLite Databases
  • класса Singleton (но не всегда рекомендуется в случае необходимости постоянные данные)
  • и т. д.

Существует так много способов передать ваши данные. Но какой тип реализации вам понадобится, всегда зависит от ситуации. Если вы хотите, чтобы ваши данные передавались только следующему действию/фрагменту, а это временные данные, просто используйте намерения.

Если вам нужны ваши данные в дальнейшем процессе вашего приложения, используйте базы данных SQLite или SharedPreferences (если это не сложные данные). Сохраните свою ценность, и вы можете получить к ней доступ, когда захотите, где хотите.

+0

Но когда вы закроете приложение и вернетесь к нему, он будет сохранен пользователю? –

+0

Нет, тогда вам понадобятся общие настройки или база данных SQLite. – blackfizz

+0

вы не можете определить, какое приложение EditText'm вводит! –

0

Вы можете сделать это тонна способов ..

Одно существо с Preferences

так, например

int myVal = 16; 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
prefs.edit().putInt("MY_KEY",myVal).commit(); 

Затем, в следующей деятельности

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
prefs.getInt("MY_KEY", 0); //Where 0 is the default value 

Вы также можете нас е намерения, как вы сказали

int myVal = 16 
Intent intent = new Intent(); //Make your intent as you normally would 
intent.putExtra("MY_KEY", myVal); 

И в onCreate() вашей следующей деятельности:

int myVal = getIntent().getExtras().getInt("MY_VALUE"); 

Однако эти основные реализации. Как сказал Арту Делуо, есть много разных способов сделать это. Вы можете сделать это с помощью фрагментов, статических классов, других пакетов и т. Д. Это зависит от ситуации: лучше всего использовать намерение, чтобы вы не просто сохраняли значения в настройках без причины. Если вам нужно только перейти от действия A к активности B, просто используйте метод намерения. Если вам это нужно в разных местах, но вы не хотите отслеживать его? Используйте prefs.

+0

Какой будет «контекст»? как показать результат в текстовом режиме сейчас? –

+0

Контекст может быть любым контекстом. Попробуйте использовать «this»; Для остальных посмотрите некоторые уроки, потому что вы задаете очень простые вопросы, на которые были даны ответы много раз. https://developer.android.com/training/basics/firstapp/building-ui.html – VicVu

0

Огромное спасибо всем, кто мне помог, я очень рад видеть, что есть важные люди, которые все еще заботятся о нас. Простым решением был конфликт между идентификаторами кнопок сохранения, потому что он обладал одним и тем же идентификатором во всех действиях. Это означает! Спасибо всем!

0

Просто способ для хранения строкового значения и восстановления в другой деятельности: 1) В начальной активности первой активности, которая наиболее возвращаемый результат в виде строки (до создания окончательного ИНТ переменной, как как RETURN_DATA_AS_STRING)

Intent intent = new Intent(getApplicationContext(), ReturningResultActivity.class); 
startActivityintent(intent,RETURN_DATA_AS_STRING); 

2) В следующей активности для хранения данных сделать следующий шаг:

Intent intent = new Intent(); 
intent.putExtra("SomeStringIdentifier", "this is resulting string"); 
setResult(RESULT_OK,intent); 

3) В первом переопределение активности onActivityResult():

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
      switch (requestCode) { 
       case RETURN_DATA_AS_STRING: { 
        String thisIsResultStringFromAnotherActivity = data.getStringExtra("SomeStringIdentifier"); 
       } 
      } 
     } 
    } 
Смежные вопросы