我想列出某些重要的事情(我每 15 秒从服务器获取一次),我想在整个应用程序中保持不变(或常见)。因此,当我通过 Intents(或任何其他方法)移至下一个活动时,我应该一直拥有该列表。安卓可以吗??
我想要不同的解决方案,这些解决方案需要尽可能少的工作。请帮忙..
编辑:我想我还没有说清楚。我不担心如何存储数据..我问的是如何实现只有一半屏幕发生变化(当我们从活动移动到活动时)而另一半保持不变(不移动)的视图。有可能吗??
您的应用程序类实例始终可以从任何活动中访问。
您需要做的就是像这样创建应用程序类:
public class YourApp extends Application {
....
}
然后在您的应用 AndroidManifest.xml 中修改以下行:
<application
android:name="your.package.YourApp"
现在你可以在任何地方访问这个类:
YourApp appInstance = (YourApp)getApplication();
使用如下所示的 PreferencesManager,创建您的 POJO 以访问 PreferencesManager。
// TODO: Auto-generated Javadoc
/**
* The Class PreferenceManager.
*/
public class PreferenceManager {
/** The Constant TAG. */
private static final String TAG = PreferenceManager.class.getSimpleName();
/** The default shared preferences. */
private static SharedPreferences defaultSharedPreferences = null;
/**
* Inits the.
*
* @param context the context
*/
public static final void init(Context context){
defaultSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context);
log("Initialize PreferenceManager!");
UserSettings.init(context);
}
/**
* Save.
*
* @param name the name
* @param value the value
*/
static final void save(String name,String value){
if( value != null ){
Editor edit = defaultSharedPreferences.edit();
edit.remove(name);
edit.putString(name, value);
edit.commit();
}else{
Editor edit = defaultSharedPreferences.edit();
edit.remove(name);
edit.commit();
}
}
/**
* Gets the.
*
* @param name the name
* @param defaultValue the default value
* @return the string
*/
public static final String get(String name,String defaultValue){
return defaultSharedPreferences.getString(name, defaultValue);
}
/**
* Save state.
*
* @param name the name
* @param state the state
*/
public static final void saveState(String name,Bundle state){
if( state != null && state.size() > 0 ){
Parcel parcel = Parcel.obtain();
parcel.writeBundle(state);
String encodeToString = Base64.encodeToString(parcel.marshall(), Base64.DEFAULT);
PreferenceManager.save(name, encodeToString);
}else{
PreferenceManager.save(name, null);
}
log("Saved state "+name);
}
/**
* Gets the state.
*
* @param name the name
* @return the state
*/
public static final Bundle getState(String name){
log("Get state "+name);
String encryptedValue = "";
try {
encryptedValue = PreferenceManager.get(name, "");
} catch (NullPointerException e) {
return new Bundle();
}
if( "".equals(encryptedValue) ){
return new Bundle();
}else{
byte[] decode = Base64.decode(encryptedValue, Base64.DEFAULT);
Parcel parcel = Parcel.obtain();
parcel.unmarshall(decode, 0, decode.length);
parcel.setDataPosition(0);
return parcel.readBundle();
}
}
/**
* Log.
*
* @param msg the msg
*/
private static final void log(String msg){
Log.d(TAG, msg);
}
}
/**
* The Class Settings.
*/
public class UserSettings {
/** The settings bundle. */
private final Bundle settingsBundle = new Bundle(1);
/**
* Save.
*/
public final void save() {
PreferenceManager.saveState(SETTINGS_STATE_NAME, settingsBundle);
}
/**
* Restore.
*/
final public void restore() {
settingsBundle.clear();
Bundle state = PreferenceManager.getState(SETTINGS_STATE_NAME);
if (state.size() == 0) {
settingsBundle.putAll(getDefaultValuesSettings());
} else {
settingsBundle.putAll(state);
}
}
final void reset() {
settingsBundle.clear();
}
/**
* Gets the settings.
*
* @return the settings
*/
public static UserSettings getSettings() {
return settings;
}
/**
* Inits the.
*
* @param ctx the ctx
*/
public static final void init(Context ctx) {
settings.restore();
setDeviceUniqueId(ctx, settings);
}
}
示例用法:
public class YourApplication extends Application {
....
onCreate(){
....
PreferenceManager.init(getBaseContext());
}
}
Where you need your data to be stored and retrieved use the methods like below.
UserSettings.getSettings().setUser(responseVal);
UserSettings.getSettings().save();
String response = UserSettings.getSettings().getUser();
您可以使用SQLite
数据库来存储这些数据,然后创建单例助手来读取它。
或者您可以使用将数据保存为文件XML
或JSON
格式化为文件,然后解析它们以读取。
或者您可以为数据的一个实体创建类容器,使其可序列化并存储SharedPreferences
为ArrayList<YourDataContainer>
如果数据量很大,您可以使用 Shared Preferences 或 SQLite DB 来存储数据。如果数据量较少,则可以使用静态变量。如果您使用静态变量,当应用程序发生任何崩溃时,数据可能会丢失。因此,静态变量的使用不太可取。