It may work but it's definitely bad practice to wait for an event using while-loop. To catch some event try to use Observer pattern. The idea of this pattern is to split up objects into observers(wait for an event) and observable(register/catch an event and notify observers)
There's built in class and interface in Java for this approach. Example:
Observable:
import java.util.Observable;
public class SharedPrefsWrapper extends Observable{
    public static final int EVENT_PUT_STRING = 0;
    public void putString(String key, String value){
        //put string into shared preferences
        //then notify Observers
        notifyObservers(EVENT_PUT_STRING);
    }
}
Observer:
import java.util.Observable;
import java.util.Observer;
public class SomeActivity extends Activity implements Observer {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.some_activity);
        SharedPrefsWrapper prefs;
        //...
        prefs.addObserver(this);
    }
    @Override
    public void update(Observable observable, Object event) {
        if(event.equals(SharedPrefsWrapper.EVENT_PUT_STRING)){
            //event of writing string is caught
        }
    }
}