我花了几个小时来找出为什么在共享首选项中保存 bool 列表不起作用。
这些方法不会保存或加载某些东西...加载方法总是返回替代值:因此 list_size 为 0, bool 值为 false。
首先,我在 MainActivity 中创建列表并调用保存方法:
SaveLoadTraining sLoad = new SaveLoadTraining();
ArrayList<Boolean> listBoolTrain = new ArrayList<Boolean>();
listBoolTrain.add(true);
listBoolTrain.add(true);
sLoad.saveArray(listBoolTrain);
子类 SaveLoadTraining 如下所示:
package de.sebspr.app08.halle;
import java.util.ArrayList;
import android.content.Context;
import android.content.SharedPreferences;
import de.sebspr.app08.MainActivity;
public class SaveLoadTraining {
private Context context;
public static final String PREFS_NAME = "ListFile";
private ArrayList<Boolean> list;
public SaveLoadTraining(){
this.context = MainActivity.getMContext();
}
public void saveArray(ArrayList<Boolean> list){
this.list = list;
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
int size = list.size();
editor.putInt("list_size", size);
for (int i = 0; i < size; i++) {
editor.remove("list_"+i);
}
for (int i = 0; i < size; i++) {
editor.putBoolean("list_"+i, list.get(i));
}
editor.commit();
}
public ArrayList<Boolean> loadArray(){
SharedPreferences file = context.getSharedPreferences(PREFS_NAME, 0);
list = new ArrayList<Boolean>();
int size = file.getInt("list_size", 0);
for(int i = 0; i<size;i++){
boolean bool = file.getBoolean("list_"+i, false);
list.add(bool);
}
return list;
}
}
我不知道出了什么问题......
也许我以错误的方式处理上下文? 我只是调用此方法来获取 MainActivity 的上下文:
...
mContext = this;
...
public static Context getMContext(){
return mContext;
}
最佳答案
只需在您的代码中进行以下更改,它就会起作用。
将 SharedPrefrences mSharedPrefs 作为您的类变量。
public class SaveLoadTraining
{
private Context context;
public static final String PREFS_NAME = "ListFile";
private ArrayList<Boolean> list;
private SharedPreferences mSharedPrefs;
public SaveLoadTraining(){
this.context = getApplicationContext();
mSharedPrefs = context.getSharedPreferences(PREFS_NAME, 0);
}
制作 2 种不同的方法来删除和添加共享首选项的值,并在两次提交而不是 1 次提交中完成。
删除列表的第一种方法
public void removeArray(ArrayList<Boolean> list)
{
SharedPreferences.Editor editor = mSharedPrefs.edit();
int size = list.size();
for (int i = 0; i < size; i++) {
editor.remove("list_"+i);
}
editor.commit();
}
添加列表的第二种方法
public void addArray(ArrayList<Boolean> list)
{
SharedPreferences.Editor editor = mSharedPrefs.edit();
int size = list.size();
editor.putInt("list_size", size);
for (int i = 0; i < size; i++) {
editor.putBoolean("list_"+i, list.get(i));
}
editor.commit();
}
我希望这会奏效。
关于android - 将 ArrayList 保存在共享首选项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17895888/
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我的模型有defself.empty_building//stuffend我怎样才能对这个现有的进行rspec?,已经尝试过:describe"empty_building"dosubject{Building.new}it{shouldrespond_to:empty_building}endbutgetting:Failure/Error:it{shouldrespond_to:empty_building}expected#torespondto:empty_building 最佳答案 你有一个类方法self.empty_bu
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?
我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:
在许多ruby类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
当且仅当模型存在时,我才尝试更新模型的值。如果没有,我什么都不做。搜索似乎只返回更新或创建问题/答案,但我不想创建。我知道我可以用一个简单的方法来做到这一点:found=Model.find_by_id(id)iffoundupdatestuffend但是,我觉得有一种方法可以在一次调用中完成此操作,而无需分配任何临时本地值或执行if。如果记录不存在,我该如何编写一个Rails调用来更新记录而不出现嘈杂错误?最新的Rails3.x 最佳答案 您可以使用try在对find_by_id或where的结果调用update_attribut
类似的东西:defdomain_exists?(domain)#performcheck#returntrue|falseendputs"valid!"ifdomain_exists?("example.com") 最佳答案 require'socket'defdomain_exists?(domain)beginSocket.gethostbyname(domain)rescueSocketErrorreturnfalseendtrueend 关于ruby-如何使用Ruby检查域是否存
我有很多模型和关系。由于这个事实,在View/Controller中有很多调用,看起来像这样:@object.something.with_something.value链的某些部分最终可能为零,这完全没问题。检查终端对象是否存在的正确/干净/快速的方法是什么?正在调用类似的东西:@object.something.with_something.valueifdefined?@object.something.with_something.value还可以吗? 最佳答案 在本地,您需要使用&&运算符(不是defined?),但这很快