How to get values ​​from general settings for a class by another class

I want to get a string from my general preference file and use it for more classes, but I don't know why not work. My reader class:

import android.app.Activity;
import android.content.SharedPreferences;

public class A {
    public static String url2;

    public void execute() {

        String URLPref = "URL";
        SharedPreferences prefs = getSharedPreferences("com.exam.search_preferences",Activity.MODE_PRIVATE);
        url2 = prefs.getString(URLPref , "");

    }

    private SharedPreferences getSharedPreferences(String string,
            int modePrivate) {

        return null;
    }


}

      

And the second class that uses the line

public class SearchHome extends Activity {

    static String url2;
    A cls2= new A();

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

        cls2.execute();
        url2 = A.url2;


        Toast.makeText(getApplicationContext(),"URL:" + url2 ,
        Toast.LENGTH_LONG).show();
...

      

Sorry for my bad english, I never learned. But I'm trying!

+3


source to share


5 answers


You need to pass Context

to a class A

because you can get SharedPreferences

from an object Context

. NOTE. Activity

is Context

to some extent

public class A {
    public static String url2;

    /** @param context used to get the SharedPreferences */
    public void execute(Context context) {

        String URLPref = "URL";
        SharedPreferences prefs = context.getSharedPreferences("com.exam.search_preferences",Activity.MODE_PRIVATE);
        url2 = prefs.getString(URLPref , "");
    }
}

      



And then pass the context to your execution method

public class SearchHome extends Activity {

    static String url2;
    A cls2= new A();

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

        // pass context 'this' to the execute function
        // This works, because SearchHome extends Activity 
        cls2.execute(this);
        url2 = A.url2;
        ...

      

+1


source


If your data is not sensitive, it would be much easier if you can create a class specifically for general preferences and access other activities. you will save a lot of time and the code will be much easier to track



public class HelperShared {
public static final String score = "Score";

public static final String tag_User_Machine = "tag_User_Machine",
    tag_Machine_Machine = "tag_Machine_Machine",
    tag_Draw_Machine = "tag_Draw_Machine",
    tag_Total_Machine = "tag_Total_Machine";


public static SharedPreferences preferences;

public static Editor editor;


public HelperShared(Context context) {
this.preferences = context.getSharedPreferences(score,
        Activity.MODE_PRIVATE);
this.editor = preferences.edit();

}


/*

* Getter and Setter methods for Machine

*/

public void setUserMachine(int UserMachine) {
editor.putInt(tag_User_Machine, UserMachine);
editor.commit();

}


public void setMachineMachine(int MachineMachine) {

   editor.putInt(tag_Machine_Machine, MachineMachine);
editor.commit();

}


public void setDrawMachine(int DrawMachine) {
editor.putInt(tag_Draw_Machine, DrawMachine);
editor.commit();

}


public void setTotalMachine(int TotalMachine) {
editor.putInt(tag_Total_Machine, TotalMachine);
editor.commit();

}


public int getUserMachine() {
return preferences.getInt(tag_User_Machine, 0);

}


public int getMachineMachine() {
return preferences.getInt(tag_Machine_Machine, 0);

}


public int getDrawMachine() {
return preferences.getInt(tag_Draw_Machine, 0);

}


public int getTotalMachine() {
return preferences.getInt(tag_Total_Machine, 0);


 }

}    

      

+1


source


 private SharedPreferences getSharedPreferences(String string,
            int modePrivate) {

        return null;
    }

      

the problem is here.

 return null;

      

you need to return a valid SharedPreferences object. otherwise, you will always get a NullPointerException.

0


source


Call this if you want to put a pref:

putPref("myKey", "mystring", getApplicationContext());

      

Call it if you want to get the prefix:

getPref("myKey", getApplicationContext());

      

You can use SharedPreferences to store any primitive data: booleans, floats, ints, longs and strings. This data will persist in user sessions (even if your application is killed).

Different Modes:
1   MODE_APPEND
This will append the new preferences with the already exisiting preferences
2   MODE_ENABLE_WRITE_AHEAD_LOGGING
Database open flag. When it is set , it would enable write ahead logging by default
3   MODE_MULTI_PROCESS
This method will check for modification of preferences even if the sharedpreference instance has already been loaded
4   MODE_PRIVATE
By setting this mode , the file can only be accessed using calling application
5   MODE_WORLD_READABLE
This mode allow other application to read the preferences
6   MODE_WORLD_WRITEABLE
This mode allow other application to write the preferences

      

More details

0


source


You just need to make the general prefrences object

in the class where you want to have the data

SharedPreferences prefrences = getSharedPreferences("my prefs",MODE_PRIVATE)

Editor editor = prefrences.edit();

String s = edit.getString("your key",value);

      

hope this helps!

0


source







All Articles