Kotlin:如何以共享首选项删除存储在数组中的项目

时间:2019-09-10 12:20:31

标签: android kotlin sharedpreferences

我想从存储在sharedPreferences中的数组(键)中删除一项(id =“ productId”)。 我在下面编写了一个包含所有这些功能的Utility类,但是该项目仍然存在于存储的Array中,如何更改代码以实现目标。

ubuntu@ip-172-31-25-61:~/voop-global-it-project/voopglobal$ gunicorn voopglobal.wsgi
[2019-09-10 12:01:01 +0000] [27716] [INFO] Starting gunicorn 19.7.1
[2019-09-10 12:01:01 +0000] [27716] [INFO] Listening at: http://127.0.0.1:8000 (27716)
[2019-09-10 12:01:01 +0000] [27716] [INFO] Using worker: sync
[2019-09-10 12:01:01 +0000] [27720] [INFO] Booting worker with pid: 27720
[2019-09-10 12:01:01 +0000] [27720] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 377, in import_app
    __import__(module)
  File "/home/ubuntu/voop-global-it-project/voopglobal/voopglobal/wsgi.py", line 12, in <module>
    from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
[2019-09-10 12:01:01 +0000] [27720] [INFO] Worker exiting (pid: 27720)
[2019-09-10 12:01:02 +0000] [27716] [INFO] Shutting down: Master
[2019-09-10 12:01:02 +0000] [27716] [INFO] Reason: Worker failed to boot.

我的活动中的以下代码:

ubuntu@ip-172-31-25-61:~$ python3 --version
Python 3.6.8
ubuntu@ip-172-31-25-61:~$ django-admin --version
2.2.5
ubuntu@ip-172-31-25-61:~$ pip3 -V
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

1 个答案:

答案 0 :(得分:1)

您的代码不起作用,因为ArrayList的{​​{1}}方法检查等于来查找您要删除的对象。您应该在remove()类中覆盖equals()方法,因为如果您不这样做,则ProductData的默认设置是检查 identity

equals()

更好的是,将class A(val id: Int) val a1 = A(1) val a2 = A(1) a1 == a2 // false, they are different objects 设为ProductData(它会生成适当的equals和hashCode方法)。

data class

我会给您更多建议:

  • 不要每次都实例化data class A(val id: Int) val a1 = A(1) val a2 = A(1) a1 == a2 // true :如果您始终使用默认配置,请重用该实例。您可以创建诸如Gson之类的顶级属性。这也适用于defaultGson = Gson()
  • 除非有充分的理由,否则避免直接使用emptyList:使用更通用的ArrayListList
  • 请记住将小写名称用作参数:MutableList应该为DataArrayList
  • 如果您想收听SharedPreference的更改以更新您的活动,则可以使用dataArrayList。更好的方法是将ViewModel与LiveData一起使用,但是我想您仍在学习,因此我将在以后继续介绍此高级主题:)