Android Flashbuilder(移动设备)中的Singleton类ArrayCollection是否为空?
我目前正在尝试实现一个Singleton类,以便存储一个项目的ArrayCollection,然后我可以在我的应用程序的整个生命周期中访问和操作这些项目。我创建了下面的Singleton类,该类用于保存ArrayCollection信息:Android Flashbuilder(移动设备)中的Singleton类ArrayCollection是否为空?,android,apache-flex,singleton,flash-builder,Android,Apache Flex,Singleton,Flash Builder,我目前正在尝试实现一个Singleton类,以便存储一个项目的ArrayCollection,然后我可以在我的应用程序的整个生命周期中访问和操作这些项目。我创建了下面的Singleton类,该类用于保存ArrayCollection信息: package valueObjects { import mx.collections.ArrayCollection; [Bindable] public class Model { private s
package valueObjects
{
import mx.collections.ArrayCollection;
[Bindable]
public class Model
{
private static var instance:Model = new Model();
public var ids:ArrayCollection = new ArrayCollection();
public function Model()
{
if(instance)
{
trace("New instance cannot be created. Use Singleton.getInstance()");
}
}
public static function getInstance():Model
{
return instance;
}
}
}
然后,我在应用程序的Deafult主页上创建了以下代码,以便在应用程序启动后立即填充ArrayCollection:
import valueObjects.Model;
protected var models:Model = new Model();
private function loop():void
{
var index:int;
for( index = 0; index < compsCollection.length; index++ )
{
trace( "Element " + index + " is " + compsCollection[index].comp_id );
models.ids.addItem(compsCollection[index].comp_id);
trace(models.ids.length);
}
}
Singleton类中的ArrayCollection正在填充,因为我在循环中输入的跟踪语句清楚地显示了ArrayCollection中的数据构建。但是,当我移动到应用程序中的另一个视图时,我会尝试使用以下代码访问Singleton类中的此ArrayCollection:
import valueObjects.Model;
protected var models:Model = Model.getInstance();
protected var test:ArrayCollection = new ArrayCollection();
protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
{
var index:int;
trace("Array Length =" + models.ids.length);
for( index = 0; index < models.ids.length; index++ )
{
trace( "Element " + index + " is " + models.ids[index].comp_id );
test.addItem(models.ids[index].comp_id);
}
testbox.text = test.toString();
}
现在我遇到的问题是,当我尝试访问此ArrayCollectionId时,出于某种原因,它似乎是空的。我已经包含了一条跟踪语句,它还表示ArrayCollection的长度为0。有人能帮忙吗?试试这个
public static function getInstance():Model
{
if(instance == null)
instance= new Model();
return instance;
}
这里不需要给变量赋值
protected var models:Model = Model.getInstance();
直截了当地使用
Model.getInstance().ids = new ArrayCollection();
试试这个,
这可能对你有帮助。在主类中,将新模型更改为Model.getInstance。然而,您仍处于项目的初始阶段,您有机会避免单身会给您带来的问题。我鼓励您直接使用依赖项注入,只需使用data属性,或者更抽象地使用依赖项注入框架,如Robotlegs、Swiz、Mate或Parsley。感谢您的快速回复,我已经将Singleton类getInstance更改为您在第一段代码中建议的类型,其余的保持不变,然后,我删除了视图中变量的赋值,该视图尝试访问ArrayCollection,最后我将ArrayCollection的所有访问参数更改为与您所说的Model.getInstance.ids.length相同。测试完后,由于某种原因,ArrayCollection长度仍然返回0。这真的很烦人,你能进一步帮助我吗?我也研究过使用FlexGlobals,但是我无法让它们在我的主默认视图上正确地查看ArrayCollection,因为它说它没有设置或初始化,我真的很想得到一些关于排序这个问题的帮助,因为我真的需要在我的应用程序中访问全局变量。Thanks@user723858现在我明白了,将实例设为publichHi,我只是在Singleton类中更改了以下行:public static var instance:Model=new Model;现在它公开了,而不是私下。但是,当我启动应用程序时,它就会崩溃,并显示错误1009:无法访问空对象引用的属性或方法。这发生在我刚换过的线路上,有什么想法或者我做错了吗??感谢不要在那里制作实例新模型;因为我们可以在getinstance中实现。我认为静态变量首先创建。你是不是建议我使用持久性管理器在我的项目中存储ArrayCollection?我是说,一种方法是在pushView的第二个参数中引用你的AC。或者您可以使用一个框架,它监视新视图添加到显示列表中,并提供它所需的内容。或者,您可以创建一些类似于框架的东西,方法是监听添加的\u TO \u STAGE,捕获新实例,并为其提供所需的信息。有各种各样的事情,你可以做,不会导致你自己纠结在泥沼你会邀请使用单身。