簡體   English   中英

使用改造無法從android中的json響應中獲取light_id

[英]Not getting light_id from json response in android using retrofit

您好在下面的代碼中,我有一個名為mPreset的按鈕。如果單擊該按鈕將get方法發送到服務器並嘗試獲取響應。如果響應成功,則打印json數據。

但是我的light_id沒有打印。 誰能幫忙解決這個問題

在下面的代碼中,我有一個名為GetScheduler的類,其中一個是String類型,其余兩個是整數類型數組。

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");

        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<List<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();
                    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]);
                        mCCT3.setProgress(getCCT[2]);
                        mCCT4.setProgress(getCCT[3]);
                        mCCT5.setProgress(getCCT[4]);
                        mCCT6.setProgress(getCCT[5]);
                        mCCT7.setProgress(getCCT[6]);
                        mCCT8.setProgress(getCCT[7]);
                        mCCT9.setProgress(getCCT[8]);
                        mCCT10.setProgress(getCCT[9]);
                        mCCT11.setProgress(getCCT[10]);
                        mCCT12.setProgress(getCCT[11]);

                    }
                }

            };

            @Override
            public void onFailure(Call<GetScheduler> call, Throwable t) {
                t.printStackTrace();
            }


        });

}

JSON:

{"status":"success","data":{"light_id":"00","intensity":[60,60,60,60,60,60,60,60,60,60,60,60],"cct":[100,100,100,100,90,90,80,90,78,89,89,90]}}

像這樣改變你的回應

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();
}

您需要創建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;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM