无法打印出检索到的Array List对象

时间:2015-03-30 15:33:52

标签: java android arrays list firebase

我无法打印出我的数组列表对象。

这是我的第一个返回arraylist对象的类:

public class user_arraylist {
public ArrayList<String> get_user_det()    {
    final ArrayList<String> temp = new ArrayList<String>(); //declare arraylist

    Firebase f_user = new Firebase("https://shareurdaydb.firebaseio.com/User/");
    f_user.addListenerForSingleValueEvent(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot snap_user) {
            // TODO Auto-generated method stub
            Iterable<DataSnapshot> rs = snap_user.getChildren();
            Iterator<DataSnapshot> irs = rs.iterator();
            long allNum2 = snap_user.getChildrenCount();
            int maxNum2 = (int)allNum2;
            int count_user = 1;
            while(irs.hasNext())
            {
                if(count_user <= maxNum2)
                {
                    Firebase user_data = new Firebase("https://myapp.firebaseio.com/"); 
                    AuthData authData = user_data.getAuth();
                    Map<String, Object> nPost = (Map<String, Object>) irs.next().getValue();

                    String db_email = nPost.get("email_addr").toString();
                    //String reply_msg_id = nPost.get("msgid").toString();

                    if (authData != null) {
                        String usr_email = authData.getProviderData().get("email").toString();
                        if(usr_email.equals(db_email))
                        {
                            String disp_name = nPost.get("disp_name").toString();
                            String real_name = nPost.get("real_name").toString();
                            temp.add(disp_name); //add to arraylist
                            temp.add(real_name);

                            for (String str : temp) {
                                            System.out.println("Item is: " + str); //working 
                                        }

                        }
                    } else {
                        System.out.println("Failed");
                    }
                }
                count_user++;
            }                       
        }
        @Override
        public void onCancelled(FirebaseError arg0) {
            // TODO Auto-generated method stub

        }
}); 
return(temp); //return array list

 }

}

  

项目是:约翰

     

项目是:乔

但是当我检索到另一个类时它不起作用。

这是我的第二个类,用于检索数组列表对象并显示它:

                    user_arraylist t = new user_arraylist();
                    ArrayList<String> arr = new ArrayList<String>();
                    arr = t.get_user_det(); //not sure if this is how you retrieve.

                    //Object user_det = get_user_det();
                    for (String temp : arr) {
                        System.out.println("NAME + " + temp); //does not work
                    }

运行之后打印出来:没有

如果我这样打印

  

System.out.println(“NAME +”+ arr.toString());

它给了我NAME:[];

有人可以解释为什么它不起作用(在第二类中它没有打印出数组列表)?

2 个答案:

答案 0 :(得分:0)

首先,这是一个非常有趣的问题。在理解你的问题之后我会观察到这件事。

请查看以下示例(如果可能,请在您的系统上运行)

  

import java.util.ArrayList;

     

public class Test {public static void main(String [] args){         class2 c2 = new class2(); final ArrayList arr = new   的ArrayList();

    c2.Onclick(new class1(){

       public void method(){
           arr.add("bhavik");
       }
    });

    System.out.println("before running method()");
    for (String temp : arr) {
      System.out.println("NAME + " + temp); //does not work
    }
    System.out.println();
    c2.execute();

    System.out.println("After running method()");

    for (String temp : arr) {
      System.out.println("NAME + " + temp); //does not work
    }     } }
     

class class1 {

public void method(){

} 
     

}

     

class class2 {
  class1 temp;
      public void Onclick(class1 x){
         temp = x;     }
    public void execute(){         temp.method();
    }
  }

观察要点:

- 在那里,我重写了在class1中定义的方法()。但我没有运行那种方法。所以无论你在这个方法中写什么都不会运行,直到你实际调用这个方法。

  

c2.Onclick(new class1(){

       public void method(){
           arr.add("bhavik");
       }
    });
  • 现在我实际上是在调用这种方法。
  

c2.execute();

    System.out.println("After running method()");

    for (String temp : arr) {
      System.out.println("NAME + " + temp);
    }

所以,现在它将打印我在ArrayList中添加的任何内容。

解决您的问题

我不知道什么是firebase(您在代码中定义的)。但我所知道的是你需要在你的代码中调用onDataChange(DataSnapshot snap_user)这个方法。

我试图记录问题,为什么会发生问题并解决问题。如果您还有任何疑问或问题,请发表评论。

谢谢,

Bhavik

答案 1 :(得分:-1)

执行此操作,但当user_list返回数据时,这将起作用

user_arraylist t = new user_arraylist();
                    ArrayList<String> arr = new ArrayList<String>();
for(int i=0;i<t.size();i++){
                   arr.add(t.get(i))
}

                    //Object user_det = get_user_det();
                    for (String temp : arr) {
                        System.out.println("NAME + " + temp); //does not work
                    }