背景资料:
我正在开发一个小应用程序。它现在的工作方式是应用程序启动的那一刻,用户将被提示主要活动。然后,用户点击登录按钮,提示登录活动。现在在我的登录活动中,我设置了一个获取用户用户名的Intent,然后将其存储在共享首选项中。如果登录成功,则用户转到用户看到的mainloggedinpage:[欢迎回来{username}]
问题如下:
如果用户通过loginactivity访问mainloggedinpage,那么您可以轻松查看他的用户名,这正是我想要的。但问题是,在主页面上,我还有其他按钮可用于其他活动。当用户点击任何这些活动然后返回到mainloggedin页面时,您看到的只有:[Welcome Back {}]。他的用户名不再显示。
我的问题:
任何人都可以建议一个快速修复,允许我显示用户名,这样即使用户从mainloggedinpage转到另一个活动,然后回到mainloggedinpage,用户仍会看到:[Welcome Back {username}] ?
我的登录活动代码[这是我获取用户名的地方]:
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
String username = user.getText().toString();
String password = pass.getText().toString();
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
Log.d("request!", "starting");
// getting product details by making HTTP request
JSONObject json = jsonParser.makeHttpRequest(
LOGIN_URL, "POST", params);
// check your log for json response
Log.d("Login attempt", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Login Successful!", json.toString());
// save user data
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(Login.this);
Editor edit = sp.edit();
edit.putString("username", username);
edit.commit();
Intent i = new Intent(Login.this, mainpage.class);
i.putExtra("Welcome back, username", username);
finish();
startActivity(i);
return json.getString(TAG_MESSAGE);
}else{
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
我的mainloggedinActivity代码[这是显示用户名的地方]:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mainpage);
msuggestions = (Button) findViewById(R.id.btn_suggestions);
msuggestions.setOnClickListener(this);
mprayertimes = (Button)findViewById(R.id.btn_activityone);
mprayertimes.setOnClickListener(this);
mqibladirection =(Button)findViewById(R.id.btn_activitytwo);
mqibladirection.setOnClickListener(this);
mnewsboard = (Button) findViewById(R.id.newsboard);
mnewsboard.setOnClickListener(this);
mhadiths = (Button) findViewById(R.id.btn_activitythree);
mhadiths.setOnClickListener(this);
mchat = (Button) findViewById(R.id.btn_discussion);
mchat.setOnClickListener(this);
mallahnames = (Button) findViewById(R.id.btn_activityfour);
mallahnames.setOnClickListener(this);
// Get Username Start
TextView txt_loggedName = (TextView) findViewById(R.id.txt_loggedName);
Intent intent = getIntent();
String username = intent.getStringExtra("Welcome back, username");
txt_loggedName.setText(username);
// Get Username End
buttonLogout = (Button) findViewById(R.id.logout);
buttonLogout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPreferences = getSharedPreferences("CurrentUser", MODE_PRIVATE);
SharedPreferences.Editor editor=mPreferences.edit();
editor.remove("username");
editor.remove("password");
editor.commit();
Message myMessage=new Message();
myMessage.obj="NOTSUCCESS";
handler.sendMessage(myMessage);
finish();
}
});
任何人都可以帮助我,那么当用户访问主页并单击其中一个按钮然后返回主页时,它仍会显示他的用户名吗? :)
答案 0 :(得分:0)
您应该从SharedPreferences中获取它,而不是从intent获取用户名,因为您已将其保存在那里。
答案 1 :(得分:0)
不要依赖Intent额外存储用户名,因为只有在用户登录后才能直接填充。
替换它:
Intent intent = getIntent();
String username = intent.getStringExtra("Welcome back, username");
txt_loggedName.setText(username);
使用:
String username = PreferenceManager.getDefaultSharedPreferences(this).getString("username", "guest");
txt_loggedName.setText("Welcome back, " + username);