我无法打印出我的数组列表对象。
这是我的第一个返回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:[];
有人可以解释为什么它不起作用(在第二类中它没有打印出数组列表)?
答案 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
}