我想在我的整個應用程序中擁有一個我希望具有常量(或常見)的特定重要事項(我從服務器每隔15秒提取一次)的列表。所以當我通過Intents(或任何其他方法)轉向下一個活動時,我應該始終擁有該列表。在android中可能嗎?如何保持我的應用程序的某些部分在整個應用程序中通用
我想要不同的解決方案,儘可能減少工作量。 請幫忙..
編輯:我想我沒有讓自己清楚。我不擔心如何存儲數據。我在問怎麼才能實現只有一半屏幕變化(當我們從活動轉移到活動時)而另一半保持不變(不移動)的視圖。可以嗎?
我想在我的整個應用程序中擁有一個我希望具有常量(或常見)的特定重要事項(我從服務器每隔15秒提取一次)的列表。所以當我通過Intents(或任何其他方法)轉向下一個活動時,我應該始終擁有該列表。在android中可能嗎?如何保持我的應用程序的某些部分在整個應用程序中通用
我想要不同的解決方案,儘可能減少工作量。 請幫忙..
編輯:我想我沒有讓自己清楚。我不擔心如何存儲數據。我在問怎麼才能實現只有一半屏幕變化(當我們從活動轉移到活動時)而另一半保持不變(不移動)的視圖。可以嗎?
如果數據量很大,可以使用Shared Preferences或SQLite DB存儲數據。如果數據量較少,則可以使用靜態變量。如果你使用靜態變量,當應用中發生數據可能丟失的任何崩潰。因此,靜態變量的使用不太可取。
您的應用程序類的實例總是從任何活動入店。
所有你需要做的就是創建應用程序類是這樣的:
public class YourApp extends Application {
....
}
然後修改下面一行在你的應用程序的AndroidManifest.xml:
<application
android:name="your.package.YourApp"
現在您可以訪問這個類無處不在:
YourApp appInstance = (YourApp)getApplication();
您可以使用SQLite
數據庫來存儲這些數據,然後創建單例助手來讀取它。
或者您可以將您的數據以XML
或JSON
格式保存爲文件,然後解析它們以讀取。
或者,您可以爲您的數據的一個實體創建類的容器,使之序列化和SharedPreferences
存儲爲ArrayList<YourDataContainer>
使用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();
你看到我的編輯了嗎? –
那麼在這種情況下,你不需要緩存數據。您可以使用IntentService來下載數據。請參閱此項目https://github.com/commonsguy/cwac-wakeful。有關IntentService的更多信息,請查看http://developer.android.com/reference/android/app/IntentService.html –
@ LalithB - 我對數據不感興趣..我對視圖感興趣! –
@ Kameswari-我取數據從服務器每15秒......所以我不看好數據太多擔心......但它不應該獲取數據的每時間新的活動被提取! –