这是我的界面:
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
中,我创建了ArrayList
(deviceModelArrayList
变量),其中包含设备对象(DeviceModel
),其中包含2个属性的名称和颜色
ArrayList正在发送到服务器,但由于某种原因,该对象没有正确形成。在for for循环中的switch语句中,我设置了设备的name
和color
,然后将其添加到ArrayList
。
我有4个设备添加到ArrayList
但是当我在服务器端打印出对象时,我只有2个设备对象,color
属性甚至不存在于任何这些设备中对象。
看起来像这样:
[{"name": "device1"}, {"name": "device2"}]
没有颜色属性,只有2个设备而不是4个。对我做错了什么的想法?是否可以在for循环中使用开关。就像break语句只是断开了开关还是内部for循环一样?
答案 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只有一个