Java 将Android.Widget.Button转换为JSON

Java 将Android.Widget.Button转换为JSON,java,android,json,serialization,Java,Android,Json,Serialization,我正在制作一个应用程序,当应用程序关闭并再次打开时,我必须在其中保存动态创建的Android.Widget.Button-Objects及其属性,如ID。 这些按钮保存在ArrayList中 我的想法是将我的按钮对象转换成JSON并保存在SharedReference中 我现在的问题是无法将按钮转换为JSON,如果在stackoverflow上找到,我将使用以下代码: (对于试用,我正在使用新的按钮对象) 它使用字符串对象或整数对象,但不使用按钮对象 有人能帮我吗?如果您动态创建按钮,这意味着您

我正在制作一个应用程序,当应用程序关闭并再次打开时,我必须在其中保存动态创建的Android.Widget.Button-Objects及其属性,如ID。
这些按钮保存在ArrayList中

我的想法是将我的按钮对象转换成JSON并保存在SharedReference中

我现在的问题是无法将按钮转换为JSON,如果在stackoverflow上找到,我将使用以下代码:

(对于试用,我正在使用新的按钮对象)

它使用字符串对象或整数对象,但不使用按钮对象


有人能帮我吗?

如果您动态创建按钮,这意味着您可能会设置颜色、文本。。。对他们来说。 因此,当您想要保存它们时,您只需要知道您有多少个按钮,以及为每个按钮设置了哪些自定义属性

所以你可以这样做: 您可以管理两个列表,一个带有按钮,另一个带有自定义属性。 为了更简单,您可以使用自定义ButtonBuilder来管理属性。 每次需要一个新按钮时,都要创建一个新的ButtonBuilder,设置属性,生成按钮,并将生成器和按钮存储在两个单独的列表中。然后,您可以将构建器列表存储在SharedPrefs中,并在下次打开应用程序时从该列表中重新生成按钮

List<ButtonBuilder> mBuilders = new ArrayList<>();
List<Button> mButtons = new ArrayList<>();

/**
 * Display a new button
 */
public void addButton(/* List of parameters*/) {
    ButtonBuilder builder = new ButtonBuilder()
            .setBgColor(myColor)
            .setText(myText);

    Button button = builder.build(context);

    mBuilders.add(builder);
    mButtons.add(button);

    // ... Display the button
}

/**
 * Call this method when you need to regenerate the buttons
 */
public void regenerateButtonsOnStart() {
    // Get from shared preferences
    mBuilders = getBuildersFromSharedPrefs();

    Button btn;
    for (ButtonBuilder builder : mBuilders) {
        btn = builder.build(context);
        mButtons.add(btn);

        // ... Display the button
    }

}

/**
 * Custom button builder
 */

public class ButtonBuilder {
    private int mBgColor;
    private String mText;
    // ... whatever you want


    public ButtonBuilder() {
    }

    public ButtonBuilder setBgColor(int bgColor) {
        this.mBgColor = bgColor;
        return this;
    }

    public ButtonBuilder setText(String text) {
        this.mText = text;
        return this;
    }

    public Button build(Context context) {
        Button btn = new Button(context);
        btn.setText(mText);
        btn.setBackgroundColor(mBgColor);

        return btn;
    }
}
List mBuilders=new ArrayList();
List mButtons=new ArrayList();
/**
*显示新按钮
*/
public void addButton(/*参数列表*/){
ButtonBuilder=新建ButtonBuilder()
.setBgColor(myColor)
.setText(myText);
Button=builder.build(上下文);
mBuilders.add(生成器);
mButtons.add(按钮);
//…显示按钮
}
/**
*当需要重新生成按钮时调用此方法
*/
public-void-start(){
//从共享首选项中获取
mBuilders=getBuildersFromSharedPrefs();
按钮btn;
用于(按钮生成器生成器:mBuilders){
btn=builder.build(上下文);
mButtons.add(btn);
//…显示按钮
}
}
/**
*自定义按钮生成器
*/
公共类按钮生成器{
私人内特mBgColor;
私有字符串多行文字;
//…你想要什么都行
公共按钮生成器(){
}
公共按钮生成器设置颜色(int bgColor){
this.mBgColor=bgColor;
归还这个;
}
公共按钮生成器setText(字符串文本){
this.mText=文本;
归还这个;
}
公共按钮生成(上下文){
按钮btn=新按钮(上下文);
btn.setText(多行文字);
btn.setBackgroundColor(mBgColor);
返回btn;
}
}

确切地告诉我你想要做什么?你不能将按钮直接存储/转换为JsonObject。我想将我的按钮对象转换为Json,这样当应用程序关闭时,我可以更轻松地存储它们。是否有更好的方法来存储按钮,或者将所有按钮都存储在TinyDB或其他类似的东西中的ArrayList?我是Android编程新手,所以不知道该用什么
List<ButtonBuilder> mBuilders = new ArrayList<>();
List<Button> mButtons = new ArrayList<>();

/**
 * Display a new button
 */
public void addButton(/* List of parameters*/) {
    ButtonBuilder builder = new ButtonBuilder()
            .setBgColor(myColor)
            .setText(myText);

    Button button = builder.build(context);

    mBuilders.add(builder);
    mButtons.add(button);

    // ... Display the button
}

/**
 * Call this method when you need to regenerate the buttons
 */
public void regenerateButtonsOnStart() {
    // Get from shared preferences
    mBuilders = getBuildersFromSharedPrefs();

    Button btn;
    for (ButtonBuilder builder : mBuilders) {
        btn = builder.build(context);
        mButtons.add(btn);

        // ... Display the button
    }

}

/**
 * Custom button builder
 */

public class ButtonBuilder {
    private int mBgColor;
    private String mText;
    // ... whatever you want


    public ButtonBuilder() {
    }

    public ButtonBuilder setBgColor(int bgColor) {
        this.mBgColor = bgColor;
        return this;
    }

    public ButtonBuilder setText(String text) {
        this.mText = text;
        return this;
    }

    public Button build(Context context) {
        Button btn = new Button(context);
        btn.setText(mText);
        btn.setBackgroundColor(mBgColor);

        return btn;
    }
}