当前位置: 首页 > 面试题库 >

如何从Android Java中的另一个类访问ArrayList?

阮鸿煊
2023-03-14
问题内容

我是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();
        }

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

提前致谢!!

编辑8/23/12

最后,我宣布自己的问题解决了这个问题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()以获取数组的大小。现在,我可以根据需要从任何需要的类中以任何合适的方式操纵数组。

我仍然不清楚为什么创建ParserHandler类的实例对我的解析后的ArrayList来说不起作用,因为当我使用simple进行测试时,它工作得很好int[]

希望这可以在将来对其他人有所帮助。

再次感谢大家的反馈!

干杯!


问题答案:

您可以通过两种方式做到这一点,

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

第一种方法:

类名: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)

private static ArrayList myArrayList = null;

... 
// assign arraylist

public static ArrayList getArrayList()
{
      return myArrayList;
}

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

private ArrayList newArrayList = null;

newArrayList = A.getArrayList();


 类似资料:
  • 我是java新手,我不知道如何从另一个类访问变量 我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量 如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。

  • 问题内容: 您好我是Java的初学者,这是我的问题:我有带有以下变量的第一堂课: 我也有这堂课: 我的问题是:我想将number1和number2变量存储到ArrayList中,然后从类test中访问此ArrayList。我怎样才能做到这一点? 问题答案: 和测试类:

  • 问题内容: 我试图尽可能简化我的困境。我有三节课: Α: Beta: 主要: 我希望我不要过分简化。我的问题是如何从Alpha中的方法访问cBeta.DoSomethingBeta()? 问题答案: 你需要以某种方式为Alpha类提供对cBeta的引用。有三种方法可以做到这一点。 1)在构造函数中为Alphas提供Beta。在Alpha课堂上写道: 并从main()调用cAlpha = new A

  • 我是一名Java程序员初学者。我试图在类交通中访问类车中的两个列表,这样我就可以执行while循环,循环直到主类中的列表为空 这就是我现在掌握的代码,我试着从普通车上扩展流量,但没有成功,我被卡住了。我该怎么解决这个问题?

  • 类:DbUserController.cs txtUrl=性能页。fxml TextField c.txtUrl。setText(“测试”); 我指的代码不起作用。 它不会将“TEST TEST”写入TextBox。