在for循环java中为json对象添加值

时间:2017-08-15 11:32:51

标签: java android arrays json

我已经定义了新的json对象和数组。

 private JSONArray array = new JSONArray();
 private JSONObject obj = new JSONObject();

然后我尝试在循环中从firebase获取一些数据并尝试将其放入定义的json对象和定义的json数组中的该对象。下面是我的代码

for(int i = 1; i < 13; i++){
        String str = Integer.toString(i);
        mRef.child("calendar").child(str).child("start_date").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                start_date = dataSnapshot.getValue().toString();

                try {
                    obj.put("start_date", start_date);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                Log.d("start_date", start_date);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        mRef.child("calendar").child(str).child("end_date").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                end_date = dataSnapshot.getValue().toString();

                try {
                    obj.put("end_date", end_date);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        Log.d("obje", "" + obj);
        array.put(obj);

    }

    Log.d("arrary", "" + array);

但是当我记录我的数组或对象时,它显示为空。下面是单个循环的json对象的日志。 D / obje:{} 这是我循环后的数组。 D / arrary:[{},{},{},{},{},{},{},{},{},{},{},{}]

但是当我在onDataChange类中记录我的对象时,它会记录数据。但是当我在循环结束时登录它显示为空。

这是开始日期的日志,表明数据来自firebase D / start_date:09/17/2016

1 个答案:

答案 0 :(得分:1)

问题是你试图从异步回调中获取值。在从异步请求获得回调之前,你的循环将结束,因此它显示为空。

试试这个,

AOP Logging Aspect