gson 如何将数组加载、保存和显示到列表中?

v64noz0r  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(185)

我的XML布局如下所示:

[....textedit....][addbutton]

=======list1=========

=======list2=========

=======list3=========

=======list4=========

如果我想加载显示共享首选项创建的列表,能够添加“项目”到列表,并保存共享首选项,该怎么办?欢迎任何额外的简单初学者解释,因为我是一个完全的新手。
我下面的代码是一个大混乱,我得到了它100%从缝合从一个例子到另一个例子,我从任何地方。

package com.mycompany.myapp;

import android.app.*;
import android.os.*;
import android.widget.EditText;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ListAdapter;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.Toast;
import android.view.View;
import android.content.SharedPreferences;
import android.content.Context;

public class MainActivity extends Activity {
    String FileName = "myFile";
    Button BtnSave;
    EditText editName;
    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        BtnSave = findViewById(R.id.btn1);
        BtnSave.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    saveFile();
                }
            });

        lv = (ListView) findViewById(R.id.list1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,empty);
        lv.setAdapter(adapter);
        //Setting onClickListener on ListView
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Toast.makeText(getApplicationContext(),"Item Clicked: "+i,Toast.LENGTH_SHORT).show();
                }
            });
        editName =  findViewById(R.id.edit1);
    }

    private void saveFile() {
        String strName = editName.getText().toString();
        SharedPreferences sharedPref = getSharedPreferences(FileName,Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("name", strName);
        editor.commit();
        Toast.makeText(this,"Data Saved Successfully",Toast.LENGTH_SHORT).show();
    }

}
8fq7wneg

8fq7wneg1#

我想这个应该对你有帮助。

fun addProduct(productsItem: Product) {

    sharedPreferences=context.getSharedPreferences(TAG,Context.MODE_PRIVATE)
    var gson=Gson()
    var cartProduct=getAllProducts()
    cartProduct.add(productsItem)
    var json=gson.toJson(cartProduct)
    println(json)

    sharedPreferences.edit().putString("cart_products",json).apply()

}

 fun getAllProducts(): ArrayList<Product?> {
    sharedPreferences=context.getSharedPreferences(TAG,Context.MODE_PRIVATE)
    val listType =
        object : TypeToken<List<Product?>?>() {}.type

    var productsItemList:ArrayList<Product?> = ArrayList();
    val json=sharedPreferences.getString("cart_products",null)

    if (json !=null){
        var gson=Gson()
        productsItemList=gson.fromJson(json,listType)

    }

    return productsItemList

}
ocebsuys

ocebsuys2#

好吧,那么你需要:1)在EditText中输入一些单词2)在ListView中显示它3)将它保存到首选项中对吗?
我想你必须做好下一步工作:
1.创建private ArrayList<String> list = new ArrayList();
1.当您在EditText中输入内容并单击按钮时,调用list.add(editName.getText.toString());,然后调用saveFile并保存list.toString();
1.当需要加载文件时,创建函数

private void loadFile() {
    SharedPreferences sharedPref = getSharedPreferences(FileName,Context.MODE_PRIVATE);
    String string = sharedPref.getString("name", "");
    ArrayList<String> newList = new ArrayList<String>(Arrays.asList(string.split(", ")));
}

1.在适配器中加载您newList

相关问题