我是 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<dogArray.size(); 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<List1> dogArray = new ArrayList<List1>();
现在我想从类 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();
}
我更喜欢通过访问器方法访问 dogArray(因为这似乎是我收集到的最佳实践)但是我愿意接受所有建议。
提前致谢!!
编辑 2012 年 8 月 23 日
我最终通过声明我的ArrayLists Static
. 我知道这种(和public
)方法对于 OOP 来说并不理想,但我会接受它。在我的 ParserHandler.java 我声明
public static ArrayList<List1> dogArray = null;
public static ArrayList<List1> otherArray = null;
public static ArrayList<List1> 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<List1>();
dogArray = new ArrayList<List1>();
otherArray = new ArrayList<List1>();
}else if(qName.equalsIgnoreCase("DataFeedAnimal")){
theList = new List1();
}
然后我的 SAX 解析的其余部分发生。最后,从我想要访问数组的任何类中,我只需以静态方式执行此操作ParserHandler.dogArray.size()
即可获取数组的大小。我现在可以从我需要的任何类中以任何我认为合适的方式操作数组。
我仍然不清楚为什么使用我解析的 ArrayLists 创建 ParserHandler 类的实例对我不起作用,因为当我使用简单的int[]
.
希望这可以在将来对其他人有所帮助。
再次感谢大家的反馈!
干杯!