RetroFit 2:发送到服务器后对象未正确形成

时间:2017-01-12 04:35:32

标签: android retrofit2

这是我的界面:

public interface DistributionServerAPI {
    @Headers("Content-type: application/json")
    @POST("device/add")
    Call<DeviceModel> createDevice(@Body ArrayList<DeviceModel> deviceArray);
}

在我的Device.java文件中:

public class Device extends Fragment {
    submitButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (numberOfDevices > 0) {
                for (int i = 0; i < numberOfDevices; i++) {
                    ViewGroup viewGroup = (ViewGroup)rootView.findViewById(i);
                    for (int index = 1; i < viewGroup.getChildCount(); index++) {
                        DeviceModel device = new DeviceModel();
                        switch (index) {
                            case 1:
                                device.setName(deviceName);
                                break;
                            case 2:
                                device.setColor(deviceColor);
                                break;
                        }
                    }
                    deviceModelArrayList.add(device);
                }

                Call<DeviceModel> deviceModel = api.createDevice(deviceModelArrayList);

                deviceModel.enqueue(new Callback<DeviceModel>() {
                    @Override
                    public void onResponse(Call<DeviceModel> call, Response<DeviceModel> response) {
                        Log.d("POSTING DEVICE", "DEVICE SAVE WAS SUCCESS");     
                    }

                    @Override
                    public void onFailure(Call<DeviceModel> call, Throwable t) {
                        Log.d("POSTING DEVICE", "DEVICE SAVE WAS FAILURE"); 
                    }
                });
            }
        }
    });
}

在上面的Device.java中,我创建了ArrayListdeviceModelArrayList变量),其中包含设备对象(DeviceModel),其中包含2个属性的名称和颜色

ArrayList正在发送到服务器,但由于某种原因,该对象没有正确形成。在for for循环中的switch语句中,我设置了设备的namecolor,然后将其添加到ArrayList

我有4个设备添加到ArrayList但是当我在服务器端打印出对象时,我只有2个设备对象,color属性甚至不存在于任何这些设备中对象。

看起来像这样:

[{"name": "device1"}, {"name": "device2"}]

没有颜色属性,只有2个设备而不是4个。对我做错了什么的想法?是否可以在for循环中使用开关。就像break语句只是断开了开关还是内部for循环一样?

1 个答案:

答案 0 :(得分:1)

首先,如果你想获得这样的观点,你应该使用标签而不是id。从代码中可以看到第二个

for (int index = 1; i < viewGroup.getChildCount(); index++) {
    DeviceModel device = new DeviceModel();
    switch (index) {
        case 1:
            device.setName(deviceName);
            break;
        case 2:
            device.setColor(deviceColor);
            break;
    }
}

使用此逻辑,您的设备模型将永远不会同时具有名称和颜色,因为您在循环内创建了一个新对象,您还可以在其中设置属性。

如果要为每个ViewGroup保留一个DeviceModel

,您的代码应该如下所示
         for (int i = 0; i < numberOfDevices; i++) {
                ViewGroup viewGroup = (ViewGroup)rootView.findViewById(i);
                DeviceModel device = new DeviceModel();
                for (int index = 1; i < viewGroup.getChildCount(); index++) {
                    switch (index) {
                        case 1:
                            device.setName(deviceName);
                            break;
                        case 2:
                            device.setColor(deviceColor);
                            break;
                    }
                }
                deviceModelArrayList.add(device);
            }

这样,每个ViewGroup都有一个DeviceModel,而每个ViewGroupChild只有一个