Как передать данные между действиями в приложении Android? - PullRequest
1239 голосов
/ 19 января 2010

У меня есть сценарий, в котором после входа на страницу входа будет выход button на каждом activity.

При нажатии sign-out я буду передаватьsession id зарегистрированного пользователя для выхода.Кто-нибудь может подсказать мне, как сделать session id доступным для всех activities?

Любая альтернатива этому делу

Ответы [ 52 ]

2 голосов
/ 07 мая 2018

Вы можете передавать данные между действиями в приложении тремя способами 1.Intent 2.SharedPreferences 3.Application

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

2 голосов
/ 15 января 2015

Используйте глобальный класс:

public class GlobalClass extends Application
{
    private float vitamin_a;


    public float getVitaminA() {
        return vitamin_a;
    }

    public void setVitaminA(float vitamin_a) {
        this.vitamin_a = vitamin_a;
    }
}

Вы можете вызывать установщики и получатели этого класса из всех других классов.Для этого вам нужно создать объект GlobalClass в каждом акте:

GlobalClass gc = (GlobalClass) getApplication();

Затем вы можете вызвать, например:

gc.getVitaminA()
2 голосов
/ 22 мая 2019

Лучший способ передать данные на один Activity на AnothetActivity с помощью Intent,

Проверьте отсканированный код

ActivityOne.java

Intent myIntent = new Intent(this, NewActivity.class);
myIntent.putExtra("key_name_one", "Your Data value here");
myIntent.putExtra("key_name_two", "Your data value here");
startActivity(myIntent)

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

SecondActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);

    Intent intent = getIntent();

    String valueOne = intent.getStringExtra("key_name_one");
    String valueTwo = intent.getStringExtra("key_name_two");
}
2 голосов
/ 21 сентября 2018

вы можете общаться между двумя действиями через намерение. Всякий раз, когда вы переходите к любому другому действию через свое действие входа в систему, вы можете поместить свой sessionId в намерение и получить это в других действиях через getIntent (). Ниже приведен фрагмент кода для этого:

LoginActivity

Intent intent = new 
Intent(YourLoginActivity.this,OtherActivity.class);
intent.putExtra("SESSION_ID",sessionId);
startActivity(intent);
finishAfterTransition();

OtherActivity

В onCreate () или там, где вам нужно, вызовите getIntent () getStringExtra ( "SESSION_ID"). Также убедитесь, что намерение имеет нулевое значение, и ключ, который вы передаете в намерении, должен быть одинаковым в обоих действиях. Здесь фрагмент полного кода:

        if(getIntent!=null && getIntent.getStringExtra("SESSION_ID")!=null){
          sessionId = getIntent.getStringExtra("SESSION_ID");
}

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

1 голос
/ 29 апреля 2018

Ваш объект данных должен расширять класс Parcelable или Serializable

Intent mIntent = new Intent(FirstActivity.this, SecondActivity.class);
mIntent.putExtra("data", data);
startActivity(mIntent);
1 голос
/ 04 июля 2017

Если вы используете kotlin:

В MainActivity1:

var intent=Intent(this,MainActivity2::class.java)
intent.putExtra("EXTRA_SESSION_ID",sessionId)
startActivity(intent)

В MainActivity2:

if (intent.hasExtra("EXTRA_SESSION_ID")){
    var name:String=intent.extras.getString("sessionId")
}
1 голос
/ 09 декабря 2013

Рассмотрите возможность использования одноэлементного файла для хранения информации о сеансе, доступной для всех действий.

Этот подход имеет несколько преимуществ по сравнению с дополнительными и статическими переменными:

  1. Позволяет расширять класс Info, добавляя новые необходимые настройки пользовательской информации. Вы можете создать новый класс, унаследовав его, или просто отредактировать класс Info без необходимости изменять обработку дополнений во всех местах.
  2. Простота использования - нет необходимости получать дополнительные услуги в каждом виде деятельности.

    public class Info {
    
        private static Info instance;
        private int id;
        private String name;
    
        //Private constructor is to disallow instances creation outside create() or getInstance() methods
        private Info() {
    
        }
    
        //Method you use to get the same information from any Activity.
        //It returns the existing Info instance, or null if not created yet.
        public static Info getInstance() {
            return instance;
        }
    
        //Creates a new Info instance or returns the existing one if it exists.
        public static synchronized Info create(int id, String name) {
    
            if (null == instance) {
                instance = new Info();
                instance.id = id;
                instance.name = name;
            }
            return instance;
        }
    }
    
1 голос
/ 18 августа 2014

Существует несколько способов передачи данных между действиями, и в документации их много.

В большинстве случаев достаточно Intent.putExtras.

1 голос
/ 01 июня 2018

Чтобы сделать это на Java:

startActivity(new Intent(this, MainActivity.class).putExtra("userId", "2"));
1 голос
/ 10 июня 2019

Создать новый Intent внутри вашей текущей деятельности

String myData="Your string/data here";
Intent intent = new Intent(this, SecondActivity.class);    
intent.putExtra("your_key",myData);
startActivity(intent);

Внутри вашего SecondActivity.java onCreate() Получить эти значения можно с помощью ключа your_key

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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