0

我想列出某些重要的事情(我每 15 秒从服务器获取一次),我想在整个应用程序中保持不变(或常见)。因此,当我通过 Intents(或任何其他方法)移至下一个活动时,我应该一直拥有该列表。安卓可以吗??

我想要不同的解决方案,这些解决方案需要尽可能少的工作。请帮忙..

编辑:我想我还没有说清楚。我不担心如何存储数据..我问的是如何实现只有一半屏幕发生变化(当我们从活动移动到活动时)而另一半保持不变(不移动)的视图。有可能吗??

4

5 回答 5

1

您的应用程序类实例始终可以从任何活动中访问。

您需要做的就是像这样创建应用程序类:

public class YourApp extends Application {
....
}

然后在您的应用 AndroidManifest.xml 中修改以下行:

<application
    android:name="your.package.YourApp"

现在你可以在任何地方访问这个类:

YourApp appInstance = (YourApp)getApplication();
于 2013-04-02T05:16:36.727 回答
1

使用如下所示的 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();
于 2013-04-02T05:19:02.260 回答
0

有很多方法可以做到这一点:

  1. 您可以将它们存储并放入应用程序的 SQLite 数据库中(数据是持久的,直到您删除应用程序或通过应用程序代码删除)查看 SQLite 用法here
  2. 您在手机内存中使用缓存它们,直到您的应用程序运行。在此处查看缓存使用情况
于 2013-04-02T05:14:54.890 回答
0
  1. 您可以使用SQLite数据库来存储这些数据,然后创建单例助手来读取它。

  2. 或者您可以使用将数据保存为文件XMLJSON格式化为文件,然后解析它们以读取。

  3. 或者您可以为数据的一个实体创建类容器,使其可序列化并存储SharedPreferencesArrayList<YourDataContainer>

于 2013-04-02T05:17:34.370 回答
0

如果数据量很大,您可以使用 Shared Preferences 或 SQLite DB 来存储数据。如果数据量较少,则可以使用静态变量。如果您使用静态变量,当应用程序发生任何崩溃时,数据可能会丢失。因此,静态变量的使用不太可取。

于 2013-04-02T05:11:32.287 回答