【问题标题】:Accessing username from all classes: Android从所有类访问用户名:Android
【发布时间】:2014-01-06 03:28:56
【问题描述】:

背景资料:

我正在开发一个小型应用程序。它现在的工作方式是在应用程序启动的那一刻,提示用户主要活动。然后从那里,用户单击提示登录活动的登录按钮。现在在我的登录活动中,我设置了一个获取用户用户名的 Intent,然后将其存储在共享首选项中。如果登录成功,则用户转到用户看到的主登录页面:[Welcome back {username}]


问题如下:

如果用户通过 loginactivity 访问主登录页面,那么您可以轻松看到他的用户名,这正是我想要的。但问题是,在主页上,我还有其他用于其他活动的按钮。当用户点击这些活动中的任何一个,然后返回到 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();
        }
  });

任何人都可以帮助我,那么当用户进入主页并单击其中一个按钮然后返回主页时,它仍然显示他的用户名吗? :)

【问题讨论】:

    标签: java php android json sharedpreferences


    【解决方案1】:

    不要依赖额外的 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);
    

    【讨论】:

    • 你真棒
    • 我认为第二个参数是未设置首选项时的默认值。如果尚未设置用户名,您可能需要做一些不同的事情。我认为 MODE_PRIVATE 不适用于此处,它用于分配权限的地方
    【解决方案2】:

    您应该从 SharedPreferences 中获取用户名,而不是从意图中获取用户名,因为您已经将其保存在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2011-01-15
      • 2014-04-11
      • 1970-01-01
      • 2020-08-31
      • 2014-04-29
      相关资源
      最近更新 更多