为了账号安全,请及时绑定邮箱和手机立即绑定

没有使用改造从android中的json响应中获取light_id

没有使用改造从android中的json响应中获取light_id

哔哔one 2022-03-10 15:46:15
在下面的代码中,我有一个名为 mPreset 的按钮。如果单击该按钮,则将 get 方法发送到服务器并尝试获取响应。如果响应成功,则打印 json 数据。但我的 light_id 没有打印。任何人都可以帮助解决这个问题在下面的代码中,我有一个名为 GetScheduler 的类,其中一个是字符串类型,其余两个是整数类型数组。GetScheduler.java: public class GetScheduler {    @SerializedName("status")    private String status;    @SerializedName("data")    private DataClass data;    public DataClass getData() {        return data;    }    public void setData(DataClass data) {        this.data= data;    }    public String getStatus() {        return status;    }    public void setStatus(String status) {        this.status = status;    }    public class DataClass {        @SerializedName("light_id")        private String light_id;        @SerializedName("intensity")        private int[] intensity;        @SerializedName("cct")        private int[] cct;        public String getLight_id() {            return light_id;        }        public void setLight_id(String light_id) {            this.light_id = light_id;        }        public int[] getIntensity() {            return intensity;        }        public void setIntensity(int[] intensity) {            this.intensity = intensity;        }        public int[] getCct() {            return cct;        }        public void setCct(int[] cct) {            this.cct = cct;        }    }在下面的类中描述了名为 API 的接口API.java: public interface API {    @retrofit2.http.GET("/gateway_schedule")    retrofit2.Call<GetScheduler> getSchedulerData();    }Main.java: mPreset.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    getCCTAndIntensityValuesForPreset();                }            });     private void getCCTAndIntensityValuesForPreset() {        String url = "http://172.24.1.1:9000";        Retrofit retrofit = null;        Log.d("123", "retrofit");
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

您需要创建 2 个类


package com.your.package;


import java.util.List;

import com.google.gson.annotations.Expose;

import com.google.gson.annotations.SerializedName;


public class Data {


@SerializedName("light_id")

@Expose

private String lightId;

@SerializedName("intensity")

@Expose

private List<Integer> intensity = null;

@SerializedName("cct")

@Expose

private List<Integer> cct = null;


public String getLightId() {

return lightId;

}


public void setLightId(String lightId) {

this.lightId = lightId;

}


public List<Integer> getIntensity() {

return intensity;

}


public void setIntensity(List<Integer> intensity) {

this.intensity = intensity;

}


public List<Integer> getCct() {

return cct;

}


public void setCct(List<Integer> cct) {

this.cct = cct;

}


}

-----------------------------------com.your.package.GetScheduler.java-----------------------------------


package com.your.package;


import com.google.gson.annotations.Expose;

import com.google.gson.annotations.SerializedName;


public class GetScheduler {


@SerializedName("status")

@Expose

private String status;

@SerializedName("data")

@Expose

private Data data;


public String getStatus() {

return status;

}


public void setStatus(String status) {

this.status = status;

}


public Data getData() {

return data;

}


public void setData(Data data) {

this.data = data;

}


}



查看完整回答
反对 回复 2022-03-10
?
当年话下

TA贡献1890条经验 获得超9个赞

像这样改变你的反应


public class GetScheduler {

   @SerializedName("status")

   private String status;


   @SerializedName("data")

   private DataClass data;


   public DataClass getData() {

        return data;

   }


   public void setData(DataClass data) {

       this.data= data;

   }

   public String getStatus() {

       return status;

   }


   public void setStatus(String status) {

      this.status = status;

    }


   public class DataClass {

        @SerializedName("light_id")

        private String light_id;

        @SerializedName("intensity")

        private int[] intensity;

        @SerializedName("cct")

        private int[] cct;


        public String getLight_id() {

            return light_id;

        }


        public void setLight_id(String light_id) {

            this.light_id = light_id;

        }


        public int[] getIntensity() {

            return intensity;

        }


        public void setIntensity(int[] intensity) {

            this.intensity = intensity;

        }


        public int[] getCct() {

            return cct;

        }


        public void setCct(int[] cct) {

            this.cct = cct;

        }

     }

}

如果你有数组响应(我看到你没有)你必须使用List<GetScheduler>否则你必须只使用GetScheduler


所以改变所有


 List<GetScheduler>


 GetScheduler

API.java


public interface API {

@retrofit2.http.GET("/gateway_schedule")

     retrofit2.Call<GetScheduler> getSchedulerData();

}

和Main.java


private void getCCTAndIntensityValuesForPreset() {

    try {

        String url = "http://172.24.1.1:9000";


        Retrofit retrofit = null;

        Log.d("123", "retrofit");


        if (retrofit == null) {

            retrofit = new Retrofit.Builder()

                    .baseUrl(url)

                    .addConverterFactory(GsonConverterFactory.create())

                    .build();

            Log.d("123", "build();");

        }

        API service = retrofit.create(API.class);


        Call<GetScheduler> call=service.getSchedulerData();

        Log.d("123", "Call<GetScheduler> call = service.getSchedulerData();");

        call.enqueue(new Callback<GetScheduler>() {

            @Override

            public void onResponse(Call<GetScheduler> call, Response<GetScheduler> response) {

                if(response!=null&&response.isSuccessful()){

                    String getLightId=response.body().getData().getLight_id().toString();

                    Toast.makeText(getApplicationContext(),"Light Id"+getLightId,Toast.LENGTH_LONG).show();

                    //String light_id=response.body()

                    int[] getIntensty=response.body().getData().getIntensity();

                    for(int i=0;i<getIntensty.length;i++){

                        getIntensty[i]=i;

                    }

                    int[] getCCT=response.body().getData().getCct();

                    for(int i=0;i<getCCT.length;i++){

                        getCCT[i]=i;

                        mCCT1.setProgress(getCCT[0]);

                        mCCT2.setProgress(getCCT[1]);

                    }

                }


            };


            @Override

            public void onFailure(Call<GetScheduler> call, Throwable t) {

                t.printStackTrace();

            }



        });


    }catch (Exception e) {

        e.printStackTrace();

    }


}

你必须onResponse像这样改变这条线


String getLightId=response.body().getData().getLight_id().toString();

我建议您添加登录 onFailure() 并查看 logCat 并删除 try catch


@Override

public void onFailure(Call<List<GetScheduler>> call, Throwable t) {

     t.printStackTrace();

}


查看完整回答
反对 回复 2022-03-10
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号