我有这样一个情况,通过登录页面登录后,每个活动页面上都会有一个“退出”按钮
。
点击“退出”后,我将传递已登录用户的会话ID
以进行注销。 有人能指导我如何使会话ID
在所有活动
中可用吗?
这种情况是否有任何替代方案?
我有这样一个情况,通过登录页面登录后,每个活动页面上都会有一个“退出”按钮
。
点击“退出”后,我将传递已登录用户的会话ID
以进行注销。 有人能指导我如何使会话ID
在所有活动
中可用吗?
这种情况是否有任何替代方案?
Intent intent = new Intent(A.this, B.class);
intent.putExtra("KEY","VALUE");
startActivity(intent);
Intent intent =getIntent();
String data =intent.getString("KEY");
在这里,您将获得“KEY”键的数据。
为了更好地使用,键应该存储在一个类中以保持简单,并有助于最小化输入错误的风险。
就像这样:
public class Constants{
public static String KEY="KEY"
}
现在在活动A中:
intent.putExtra(Constants.KEY,"VALUE");
String data =intent.getString(Constants.KEY);
尝试这样做:
CurrentActivity.java
Intent intent = new Intent(currentActivity.this, TargetActivity.class);
intent.putExtra("booktype", "favourate");
startActivity(intent);
TargetActivity.java
Bundle b = getIntent().getExtras();
String typesofbook = b.getString("booktype");
Bundle
方法已经在2012年被PRABEESH R K提出,以及Ajay Venugopal,Krishna,Gavine Joyce。而且可以通过其他7个答案中提出的i.putExtras()
/getIntent().getString()
来简化。 - MurmelCharlie Collins给了我一个完美的答案,使用Application.class
。我之前不知道我们能够如此轻松地子类化它。下面是一个使用自定义应用程序类的简化示例。
AndroidManifest.xml
使用android:name
属性来使用自己的应用程序类。
...
<application android:name="MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
....
MyApplication.java
将其用作全局引用持有者。在同一进程中使用效果很好。
public class MyApplication extends Application {
private MainActivity mainActivity;
@Override
public void onCreate() {
super.onCreate();
}
public void setMainActivity(MainActivity activity) { this.mainActivity=activity; }
public MainActivity getMainActivity() { return mainActivity; }
}
MainActivity.java
将全局“单例”引用设置为应用程序实例。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApplication)getApplication()).setMainActivity(this);
}
...
}
MyPreferences.java
这是一个简单的示例,我在另一个活动实例中使用主活动。
public class MyPreferences extends PreferenceActivity
implements SharedPreferences.OnSharedPreferenceChangeListener {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (!key.equals("autostart")) {
((MyApplication)getApplication()).getMainActivity().refreshUI();
}
}
}
我在一个类中使用静态字段,并进行get/set操作:
比如:
public class Info
{
public static int ID = 0;
public static String NAME = "TEST";
}
在Activity中获取值,使用以下代码:
Info.ID
Info.NAME
设置一个值:
Info.ID = 5;
Info.NAME = "USER!";
使用Intent
将数据从一个Activity
传递到另一个AnothetActivity
是最佳方法。
检查代码片段:
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)
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");
}
您可以通过Intent在两个Activity之间进行通信。每当从登录Activity导航到其他Activity时,您都可以将sessionId放入Intent中,并通过getIntent()在其他Activity中获取。以下是该代码片段:
LoginActivity:
Intent intent = new Intent(YourLoginActivity.this,OtherActivity.class);
intent.putExtra("SESSION_ID",sessionId);
startActivity(intent);
finishAfterTransition();
OtherActivity:
在 onCreate() 或者任何需要调用的地方使用 getIntent().getStringExtra("SESSION_ID")。
另外,确保检查 intent 是否为空并且传递给 intent 的键在两个活动中应该相同。以下是完整的代码片段:
if(getIntent!=null && getIntent.getStringExtra("SESSION_ID")!=null){
sessionId = getIntent.getStringExtra("SESSION_ID");
}
我建议您使用AppSharedPreferences来存储sessionId,并在需要的地方从中获取。
您的数据对象应该扩展Parcelable或Serializable类。
Intent mIntent = new Intent(FirstActivity.this, SecondActivity.class);
mIntent.putExtra("data", data);
startActivity(mIntent);
要在所有活动中访问会话ID,您必须将会话ID存储在SharedPreference中。
请参见我正在使用的管理会话的类,您也可以使用相同的类。
以下是原始答案:
Original Answer
import android.content.Context;
import android.content.SharedPreferences;
public class SessionManager {
public static String KEY_SESSIONID = "session_id";
public static String PREF_NAME = "AppPref";
SharedPreferences sharedPreference;
SharedPreferences.Editor editor;
Context mContext;
public SessionManager(Context context) {
this.mContext = context;
sharedPreference = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
editor = sharedPreference.edit();
}
public String getSessionId() {
return sharedPreference.getString(KEY_SESSIONID, "");
}
public void setSessionID(String id) {
editor.putString(KEY_SESSIONID, id);
editor.commit();
editor.apply();
}
}
//Now you can access your session using below methods in every activities.
SessionManager sm = new SessionManager(MainActivity.this);
sm.getSessionId();
//below line us used to set session id on after success response on login page.
sm.setSessionID("test");
var intent=Intent(this,MainActivity2::class.java)
intent.putExtra("EXTRA_SESSION_ID",sessionId)
startActivity(intent)
if (intent.hasExtra("EXTRA_SESSION_ID")){
var name:String=intent.extras.getString("sessionId")
}
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");
}
}