我是Android和Java的新手,但是在Objective
C和iPhone编程方面确实有一些经验。我试图重新创建一个已经为iPhone设计的应用程序,并且陷入了应该是一个简单概念的困境。
在我的ParserHandler类中,我从服务器解析XML,并将数据放入三个单独的ArrayList中。解析似乎工作正常。当我登录并在ParserHandler.java类中遍历ArrayList时,一切正常。(List1.java类有一些字符串变量,我已经宣布它在ParserHandler像这样:private
List1 theList = new List1();)
for(int i = 0; i
theList = dogArray.get(i);
Log.i(TAG, "looping " + i + " " + theList.Name);
Log.i(TAG, "looping " + i + " " + theList.PhotoUrl);
Log.i(TAG, "looping " + i + " " + theList.Type);
}//this loops fine and has all the data
dogArray的声明是这样的:public ArrayList dogArray = new ArrayList();现在,我想从DogListView.java类访问dogArray,因此在onCreate方法中尝试执行以下操作:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dog_list_view);
ParserHandler ph = new ParserHandler();
int d = ph.getNumberofDogs();
int m = ph.dogArray.size();
Log.i(TAG, "dog size is:" + d + "and:" + m);}
我尝试了两种不同的方式,并且两种方式都始终在日志中返回“
0”。但是,始终记录正确的大小,并且当日志来自ParserHandler.java类时,所有数据都存在。
这是ParserHandler.java中的访问器方法。
public int getNumberofDogs(){
return dogArray.size();
}
我更喜欢通过accessor方法访问dogArray(因为这似乎是我收集的最佳实践),但是我愿意接受所有建议。
提前致谢!!
编辑8/23/12
最后,我宣布自己的问题解决了这个问题ArrayLists
Static。我知道这种(和public)方法对于OOP来说并不理想,但我会继续使用它。在我的ParserHandler.java中,我声明了
public static ArrayList dogArray = null;
public static ArrayList otherArray = null;
public static ArrayList catArray = null;
然后开始我的SAX解析器:
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
if (qName.equalsIgnoreCase("ArrayOfDataFeedAnimal")){
catArray = new ArrayList();
dogArray = new ArrayList();
otherArray = new ArrayList();
}else if(qName.equalsIgnoreCase("DataFeedAnimal")){
theList = new List1();
}
然后其余的SAX解析工作就会发生。最后,无论我要访问数组的任何类,我都可以通过静态方式简单地做到这一点,ParserHandler.dogArray.size()以获取数组的大小。现在,我可以根据需要从任何需要的类中以任何合适的方式操纵数组。
我仍然不清楚为什么创建ParserHandler类的实例对我的解析后的ArrayList来说不起作用,因为当我使用simple进行测试时,它工作得很好int[]。
希望这可以在将来对其他人有所帮助。
再次感谢大家的反馈!
干杯!