Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-在本地配置文件中存储一些设置_Java_Android - Fatal编程技术网

Java Android-在本地配置文件中存储一些设置

Java Android-在本地配置文件中存储一些设置,java,android,Java,Android,我有一个android应用程序,在oncreate()上,从服务器加载一个json设置文件,json文件包含google analytics id、admob代码等,然后运行应用程序 下面是我当前的函数 private void makeJsonObjectRequest() { JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url, null, new Response.List

我有一个android应用程序,在oncreate()上,从服务器加载一个json设置文件,json文件包含google analytics id、admob代码等,然后运行应用程序

下面是我当前的函数

private void makeJsonObjectRequest() {
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONObject settings = response.getJSONObject("settings");
                        analyticid = settings.getString("google_anaytics");
                        admonbannerid = settings.getString("admob_banner");
                        admobinterstitialid = settings.getString("admob_interstitial");
                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
    // Adding request to request queue
    addToRequestQueue(jsonObjReq);
}
private void makeJsonObjectRequest(){
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONObject设置=response.getJSONObject(“设置”);
analyticid=settings.getString(“google_anaytics”);
admonbannerid=settings.getString(“admob_banner”);
admobinterstitalid=settings.getString(“admob_interstitial”);
}捕获(JSONException e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),“错误:+e.getMessage(),Toast.LENGTH_LONG).show();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(标记“Error:+Error.getMessage());
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_SHORT.show();
}
});
//将请求添加到请求队列
addToRequestQueue(JSONOBJEQ);
}
但为了优化这一点,我想在用户设备中创建一个本地设置文件,当我存储这些设置时,不再每次调用json,而是先检查这个文件,获取设置,如果为空,然后生成新文件

有人知道这个问题的解决方案吗?或者说这是可能的


非常感谢并提前向您表示感谢

您可以使用SharedReferences将设置存储在设备中

  • 例如:
来自androidhive:

初始化:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
存储数据:

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.commit(); // commit changes
检索数据:

// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
清除/删除一个键/值:

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email

editor.commit(); // commit changes
清除/删除所有数据:

editor.clear();
editor.commit(); // commit changes
您还可以创建一个自定义类来管理所有的首选项,并从您需要的任何地方调用它。可能是这样的:

public class SharedPreferencesManager {
    SharedPreferences pref;
    Editor editor;
    Context _context;
    int PRIVATE_MODE = 0;

    private static final String PREF_NAME = "my_preferences";

    //Preferences keys
    public static final String MY_KEY_ONE = "myKeyOne";

    // Constructor
    public SharedPreferencesManager(Context context){
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }

    //STORE VALUE
    public void storeValue(String key, String value){ //value can be of any type you need
        //Save value
        editor.putString(key, value);

        // DONT FORGET to commit changes
        editor.commit();

    }

    //GET VALUE
    public String getStringValue(String key){
        return pref.getString(key, null);
    }

    //REMOVE ONE VALUE
    public void removeValue(String key){
        editor.remove(key);
        editor.commit();
    }

    //CLEAR DATA
    public void clearAllValues(){
        editor.clear();
        editor.commit();
    }

}
然后像这样使用它:

//init
preferencesManager = new SharedPreferencesManager(getApplicationContext());

//Store Value
preferencesManager.storeValue(SharedPreferencesManager.MY_KEY_ONE, "superValue");

//Get value
String myKeyValue = preferencesManager.getStringValue(SharedPreferencesManager.MY_KEY_ONE);

//Check if value exists
if(myKeyValue == null){
     //loadFromJSON
}

//Clear all values
preferencesManager.clearAllValues();

您可以使用SharedReferences将设置存储在设备中

  • 例如:
来自androidhive:

初始化:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
存储数据:

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.commit(); // commit changes
检索数据:

// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
清除/删除一个键/值:

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email

editor.commit(); // commit changes
清除/删除所有数据:

editor.clear();
editor.commit(); // commit changes
您还可以创建一个自定义类来管理所有的首选项,并从您需要的任何地方调用它。可能是这样的:

public class SharedPreferencesManager {
    SharedPreferences pref;
    Editor editor;
    Context _context;
    int PRIVATE_MODE = 0;

    private static final String PREF_NAME = "my_preferences";

    //Preferences keys
    public static final String MY_KEY_ONE = "myKeyOne";

    // Constructor
    public SharedPreferencesManager(Context context){
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }

    //STORE VALUE
    public void storeValue(String key, String value){ //value can be of any type you need
        //Save value
        editor.putString(key, value);

        // DONT FORGET to commit changes
        editor.commit();

    }

    //GET VALUE
    public String getStringValue(String key){
        return pref.getString(key, null);
    }

    //REMOVE ONE VALUE
    public void removeValue(String key){
        editor.remove(key);
        editor.commit();
    }

    //CLEAR DATA
    public void clearAllValues(){
        editor.clear();
        editor.commit();
    }

}
然后像这样使用它:

//init
preferencesManager = new SharedPreferencesManager(getApplicationContext());

//Store Value
preferencesManager.storeValue(SharedPreferencesManager.MY_KEY_ONE, "superValue");

//Get value
String myKeyValue = preferencesManager.getStringValue(SharedPreferencesManager.MY_KEY_ONE);

//Check if value exists
if(myKeyValue == null){
     //loadFromJSON
}

//Clear all values
preferencesManager.clearAllValues();

为什么不将设置存储为可使用应用程序的本地设置的一部分

SharedPreferences mPreferences = PreferenceManager
                .getDefaultSharedPreferences(mCtx);

SharedPreferences.Editor mEditor = mPreferences.edit();
mEditor.put("keyOfTheSetting",value);
mEditor.commit();
以及查找是否有设置

mPreferences.get("keyOfTheSetting","");

为什么不将设置存储为可使用应用程序的本地设置的一部分

SharedPreferences mPreferences = PreferenceManager
                .getDefaultSharedPreferences(mCtx);

SharedPreferences.Editor mEditor = mPreferences.edit();
mEditor.put("keyOfTheSetting",value);
mEditor.commit();
以及查找是否有设置

mPreferences.get("keyOfTheSetting","");

嗨,佩德罗,我集成了你的代码,但我得到了两个错误:“错误:(124,39)错误:找不到符号变量mCtx”和“错误:(127,15)错误:找不到符号方法put(String,String)”,我如何解决这个问题?您的解决方案似乎很有趣编辑mCtx是您活动的上下文,如果您在活动类下,您可以使用此或ActivityClassName。thisHi Pedro,我集成了您的代码,但出现了两个错误:“错误:(124,39)错误:找不到符号变量mCtx”和“错误:(127,15)错误:找不到符号方法put”(String,String)”,我如何解决这个问题?你的解决方案似乎很有趣编辑mCtx是你活动的上下文,如果你在活动课下,你可以使用这个或你的ActivityClassName。这是一个多么好的答案Nikiole!非常感谢你,它满足了我的需要。很高兴我能帮助你:)这是一个多么好的答案Nikiole!非常感谢,它满足了我的需要。很高兴我能帮上忙:)