如何从 Android Java 中的另一个类访问 ArrayList? [英] How to access ArrayList from another class in Android Java?

查看:33
本文介绍了如何从 Android Java 中的另一个类访问 ArrayList?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Android 和 Java 新手,但在 Objective C 和 iPhone 编程方面确实有一些经验.我正在尝试重新创建一个我已经为 iPhone 设计的应用程序,但我被困在一个简单的概念上.

I'm new to Android and Java but do have some experience in Objective C and iPhone programming. I'm attempting to recreate an app I've already designed for the iPhone and am getting stuck on what should be a simple concept.

在我的 ParserHandler 类中,我正在解析来自服务器的 XML 并将数据放入三个单独的 ArrayList 中.解析似乎工作正常.当我登录并遍历 ParserHandler.java 类中的 ArrayList 时,一切正常.(List1.java 类有几个字符串变量,我在 ParserHandler 中这样声明它: private List1 theList = new List1(); )

In my ParserHandler class I am parsing an XML from a server and putting the data into three separate ArrayList's. The parsing appears to be working fine. When I log and iterate through the ArrayList within my ParserHandler.java class it all works fine. (List1.java class has a few string variables and I've declared it like so in the 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 ArrayListdogArray = new ArrayList();现在我想从类 DogListView.java 访问 dogArray 所以在 onCreate 方法中我尝试执行以下操作:

The dogArray is declared like so: public ArrayList<List1> dogArray = new ArrayList<List1>(); Now I want to access the dogArray from the class DogListView.java so in the onCreate method I attempt to do the following:

@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 类时,总是会记录正确的大小并且所有数据都在那里.

I've tried two different ways and both always return "0" in the log. However the correct size is always logged and all the data is there when the log comes from the ParserHandler.java class.

这是 ParserHandler.java 中的访问器方法.

This is the accessor method in ParserHandler.java.

   public int getNumberofDogs(){
            return dogArray.size();
        }

我更喜欢通过访问器方法访问 dogArray(因为这似乎是我收集到的最佳实践),但我愿意接受所有建议.

I'd prefer to access the dogArray via accessor method (as this seems to be best practice from what I've gathered) however I'm open to all suggestions.

提前致谢!!

编辑 8/23/12

我最终通过声明我的 ArrayLists Static 解决了这个问题.我知道这种(和 public)方法对于 OOP 来说并不理想,但我正在接受它.在我的 ParserHandler.java 中,我声明了

I ended up solving the problem by declaring my ArrayLists Static. I know this (and public) approach my not be ideal for OOP but i'm going with it. In my ParserHandler.java I declared

public static ArrayList<List1> dogArray = null; 
public static ArrayList<List1> otherArray = null;
public static ArrayList<List1> catArray = null;

然后开始我的 SAX 解析器:

Then begin my SAX parser:

@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() 以静态方式执行此操作即可获取数组的大小.我现在可以从我需要的任何类中以任何我认为合适的方式操作数组.

then the rest of my SAX parsing stuff happens. Lastly, from whatever class I want to access the array i simply do that in the static way by ParserHandler.dogArray.size() to get the size of the array. I can now manipulate the array any way i see fit from whatever class i need to get it.

我仍然不清楚为什么用我解析的 ArrayLists 创建 ParserHandler 类的实例对我不起作用,因为当我用简单的 int[] 测试时它工作正常.

I'm still unclear why creating an instance of the ParserHandler class hasn't worked for me with my parsed ArrayLists because when it worked fine when I tested with a simple int[].

希望这可以在未来帮助其他人.

hopefully this can help someone else in the future.

再次感谢大家的反馈!

干杯!

推荐答案

你可以通过两种方式,

  1. 创建一个 setter/getter 类
  2. 创建一个返回ArrayList的公共静态方法

第一种方法:

类名:myDataObject.java

class name : myDataObject.java

private ArrayList myArrayList;

// setting the ArrayList Value 
public void setArrayList ( ArrayList myArrayList )
{
     this.myArrayList = myArrayList;
}

// getting the ArrayList value 
public ArrayList getArrayList() 
{
     return myArrayList;
}

第二种方法:

在ArrayList文件中,(假设类名是类A.java)

In ArrayList file, ( suppose class name is class A.java )

private static ArrayList myArrayList = null; 

... 
// assign arraylist 

public static ArrayList getArrayList()
{
      return myArrayList;
}

在调用活动/类中,您可以使用以下代码调用它,

in the calling activity/class you can call it using following code,

private ArrayList newArrayList = null;

newArrayList = A.getArrayList();

这篇关于如何从 Android Java 中的另一个类访问 ArrayList?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆