![](/img/trans.png)
[英]Android: How to get specific string from json response using retrofit?
[英]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.