Muhammad
Muhammad

Reputation: 33

change value of string from other activity in java

I have two classes Class "A" and Class "B". In class A i have declared a String password ="admin" .Now in class B i am taking value from user and i want to change that value of string in class A and want to store value that user entered. How can i do that? Any help please?

class A

 forgetpassword.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent j = new Intent(MainActivity.this,newpassword.class);
                    startActivity(j);

Class B

 EditText newpassword;
        Button change;

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

            newpassword = (EditText)findViewById(R.id.newpassword);
            change = (Button)findViewById(R.id.chnage);



            change.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    MainActivity.b= newpassword.getText().toString();

                    Intent y= new Intent(NewPassword.this,MainActivity.class);
                    startActivity(y);



                }
            });

Upvotes: 2

Views: 1640

Answers (4)

Dhaval Solanki
Dhaval Solanki

Reputation: 4705

Muhammad,

There are many ways to do that and some of the listing here,

  • Use Broadcast receiver
  • Use start activity for result
  • Use static variable

From all of this if you want to change much time then I think broadcast receiver is good one,

Here is the example of broadcast receiver,

In your activity A register broadcast receiver with specific action,

 private BroadcastReceiver brodcastRec=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent!=null && intent.getAction().equals("changePassword")){
                String newPassword=intent.getStringExtra("newPassword");
                //do whatever you want to do here after getting new password
            }
        }
    };

And then after write following code in your on create of activity A

IntentFilter intentFilter=new IntentFilter("changePassword");
        registerReceiver(brodcastRec,intentFilter);

And In your activity B or click event of Button

Intent intent=new Intent();
    intent.setAction("changePassword");
    intent.putExtra("newPassword","yourValue");
    sendBroadcast(intent);

Upvotes: 0

Rohit Singh
Rohit Singh

Reputation: 18202

Use StartActivityForResult()

When you intend to get some result back from an Activity you should start activity using startActivityForResult(intent,requestcode)

Its easy Follow these steps

StartActivity

Intent i = new Intent(MainActivity.this, ForgotPasswordActivity.class);
startActivityForResult(i, 1);

Set new password in ForgotPasswordActivity

Now you are in ForgotPasswordActivity, set your new password and return back to MainActivity on Button click like this.

change.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                

                Intent y= new Intent(NewPassword.this,MainActivity.class);
                y.putExtra("someKey",newpassword.getText().toString());   //set new password
                setResult(Activity.RESULT_OK, returnIntent); // set your result
                finish(); // return back to MainActivity



            }
        });

Retrive new Password in MainActivity

Now you navigated back to MainActivty to retrieve your new password override onActivityResultMethod().

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == 1) {
    if(resultCode == Activity.RESULT_OK){
        String newPassword=data.getStringExtra("someKey");
    }
    if (resultCode == Activity.RESULT_CANCELED) {
        //Write your code if there's no result
    }
}
}

Here a link on startActivityForResult()

Upvotes: 1

Geet Choubey
Geet Choubey

Reputation: 1077

This can lead to context leaking or NPE when you finish the activity. Instead use an Application class and initialize the string variable in it and with the use of getters() and setters() you can access the variable.

public class BaseApplication extends android.app.Application{


private String admin;
    @Override
    onCreate(...){
        this.admin = "";
    }

    public String getAdmin(){
        return this.admin;
    }

    public void setAdmin(String admin){
        this.admin = admin;
    }

}

classA:

...
((BaseApplication) getApplicationContext()).setAdmin("!mpr355!v3");
...

classB:

...
String myAdmin = ((BaseApplication) getApplicationContext()).getAdmin();
...

Also in your manifest file.

<application

android:name=".BaseApplication"

` ...>

UPDATE

Before startActivity(y);

just call

y.putExtra("pass", password);

and in your MainActivity, call getIntent().getStringExtra("pass");

Check for null pointers and you are good to go! :)

Upvotes: 0

Sony
Sony

Reputation: 7196

You can send data from one activity to another in the intent, Use the putExtra() methods the intent class to pass data.Send the data like this

Intent y= new Intent(NewPassword.this,MainActivity.class);
y.putExtra("yourKey",newpassword.getText().toString())
startActivity(y);

and in the onCreate() of MianActivity you can retrieve the value using getStringExtra("yourKey") like this

Intent callingIntent = getIntent();
String password = callingIntent.getStringExtra("yourKey");

and use the password.

Or you can start the NewPassword activity for a result and get the data back in onActivityResult()

Intent newPasswordIntent = new Intent(this,NewPassword.class);
startActivityForResult(newPasswordIntent ,REQUEST_CODE);

and in the change button click handler,

Intent intent= new Intent();
intent.putExtra("yourKey",newpassword.getText().toString());
setResult(Activity.RESULT_OK, intent);
finish();

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    String password = data.getStringExtra("yourKey")
}

Public static variables are easy to call, be aware that they can cause memory leaks

Upvotes: 0

Related Questions