响应不是来自使用 retrofit2 的服务器
Response is not coming from server using retrofit2
你好,在下面的代码中,我有一个 get 方法来自 get 方法,使用改造库解析 json 响应。
对于以下挑战 class 通过 pojo classes 解析 json 响应,但响应不是来自服务器。
任何人都可以帮助解决这个问题吗
回应:
{
success: true,
result: {
token: TOKENSTRING, // Challenge token to be used for login.
serverTime: TIMESTAMP, // Current Server time
expireTime: TIMESTAMP // Time when token expires
}
}
GetChallenge.java:
private void getchallenge() {
//Here a logging interceptor is created
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
//The logging interceptor will be added to the http client
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(logging);
final GetNoticeDataService service = RetrofitInstance.getRetrofitInstance().create(GetNoticeDataService.class);
/** Call the method with parameter in the interface to get the notice data*/
Call<ManageChallenge> call = service.getChallengeList();
/**Log the URL called*/
Log.wtf("URL Called", call.request().url() + "");
call.enqueue(new Callback<ManageChallenge>() {
@Override
public void onResponse(Call<ManageChallenge> call, Response<ManageChallenge> response) {
if(response.isSuccessful() ) {
ManageChallenge challenge=response.body();
// String response1=response.body().toString();
String success=challenge.getSuccess().toString();
if(success.equals("true")){
String result= challenge.getResult().toString();
try {
JSONObject jsonObject =new JSONObject(result);
String token = jsonObject.getString("token");
Log.i("token", "token" + token);
String serverTime =jsonObject.getString("serverTime");
Log.i("serverTime", "serverTime" + serverTime);
String expireTime =jsonObject.getString("expireTime");
Log.i("expireTime", "expireTime" + expireTime);
} catch (JSONException e) {
e.printStackTrace();
}
}
Log.i("REsult", "Get submitted to API." + challenge);
}
}
@Override
public void onFailure(Call<ManageChallenge> call, Throwable t) {
Toast.makeText(LoginActivity.this, "Something went wrong...Error message: " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
RetrofitInstance.java:
public class RetrofitInstance {
private static Retrofit retrofit;
private static final String BASE_URL = "http://XXXXXXXXXXXX/";
/**
* Create an instance of Retrofit object
* */
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
GetNoticeDataService.java:
public interface GetNoticeDataService {
@Headers("Content-Type: application/json")
@GET("webservice.php?operation=getchallenge&username=admin")
Call<ManageChallenge> getChallengeList();
}
ManageChallenge.java:
public class ManageChallenge {
@SerializedName("success")
private String success;
@SerializedName("result")
private List <getChallengeList> result;
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public List<getChallengeList> getResult() {
return result;
}
public void setResult(List<getChallengeList> result) {
this.result = result;
}
}
getChallengeList.java:
public class getChallengeList {
@SerializedName("token")
@Expose
private String token;
@SerializedName("serverTime")
@Expose
private String serverTime;
@SerializedName("expireTime")
@Expose
private String expireTime;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getServerTime() {
return serverTime;
}
public void setServerTime(String serverTime) {
this.serverTime = serverTime;
}
public String getExpireTime() {
return expireTime;
}
public void setExpireTime(String expireTime) {
this.expireTime = expireTime;
}
public getChallengeList(String tokens, String expireTimes, String serverTimes){
token = tokens;
expireTime = expireTimes;
serverTime = serverTimes;
}
}
邮递员回复:
{"success":true,"result":{"token":"5e2ab99eb318f","serverTime":1579858334,"expireTime":1579858634}}
在您的邮递员回复中,"result" return 一个 json 对象,但在您的 ManageChallenge.java 中。您将结果声明为对象列表。所以我认为它可能会在转换时导致一些错误。
PS。您应该在第一个字符处用大写字母声明您的 class 名称。否则,将来可能会造成一些混乱。
PS2。对不起我糟糕的英语水平。
根据您的回复,这里没有列表,因为问题在这里
@SerializedName("result")
private List<GetChallengeList> result;
改成这样
public class ManageChallenge {
@SerializedName("success")
private String success;
@SerializedName("result")
private GetChallengeList result;
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public GetChallengeList getResult() {
return result;
}
public void setResult(GetChallengeList result) {
this.result = result;
}
}
获取挑战列表class
public class GetChallengeList {
@SerializedName("token")
@Expose
private String token;
@SerializedName("serverTime")
@Expose
private String serverTime;
@SerializedName("expireTime")
@Expose
private String expireTime;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getServerTime() {
return serverTime;
}
public void setServerTime(String serverTime) {
this.serverTime = serverTime;
}
public String getExpireTime() {
return expireTime;
}
public void setExpireTime(String expireTime) {
this.expireTime = expireTime;
}
public GetChallengeList(String tokens, String expireTimes, String serverTimes){
token = tokens;
expireTime = expireTimes;
serverTime = serverTimes;
}
}
我不明白你正在使用改造并使用 json 对象获取响应,你可以直接将模型调用传递给改造,而不是使用模型调用轻松获取数据。 responce.body().challenge().getResult().toString()
你好,在下面的代码中,我有一个 get 方法来自 get 方法,使用改造库解析 json 响应。
对于以下挑战 class 通过 pojo classes 解析 json 响应,但响应不是来自服务器。
任何人都可以帮助解决这个问题吗 回应:
{
success: true,
result: {
token: TOKENSTRING, // Challenge token to be used for login.
serverTime: TIMESTAMP, // Current Server time
expireTime: TIMESTAMP // Time when token expires
}
}
GetChallenge.java:
private void getchallenge() {
//Here a logging interceptor is created
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
//The logging interceptor will be added to the http client
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(logging);
final GetNoticeDataService service = RetrofitInstance.getRetrofitInstance().create(GetNoticeDataService.class);
/** Call the method with parameter in the interface to get the notice data*/
Call<ManageChallenge> call = service.getChallengeList();
/**Log the URL called*/
Log.wtf("URL Called", call.request().url() + "");
call.enqueue(new Callback<ManageChallenge>() {
@Override
public void onResponse(Call<ManageChallenge> call, Response<ManageChallenge> response) {
if(response.isSuccessful() ) {
ManageChallenge challenge=response.body();
// String response1=response.body().toString();
String success=challenge.getSuccess().toString();
if(success.equals("true")){
String result= challenge.getResult().toString();
try {
JSONObject jsonObject =new JSONObject(result);
String token = jsonObject.getString("token");
Log.i("token", "token" + token);
String serverTime =jsonObject.getString("serverTime");
Log.i("serverTime", "serverTime" + serverTime);
String expireTime =jsonObject.getString("expireTime");
Log.i("expireTime", "expireTime" + expireTime);
} catch (JSONException e) {
e.printStackTrace();
}
}
Log.i("REsult", "Get submitted to API." + challenge);
}
}
@Override
public void onFailure(Call<ManageChallenge> call, Throwable t) {
Toast.makeText(LoginActivity.this, "Something went wrong...Error message: " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
RetrofitInstance.java:
public class RetrofitInstance {
private static Retrofit retrofit;
private static final String BASE_URL = "http://XXXXXXXXXXXX/";
/**
* Create an instance of Retrofit object
* */
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
GetNoticeDataService.java:
public interface GetNoticeDataService {
@Headers("Content-Type: application/json")
@GET("webservice.php?operation=getchallenge&username=admin")
Call<ManageChallenge> getChallengeList();
}
ManageChallenge.java:
public class ManageChallenge {
@SerializedName("success")
private String success;
@SerializedName("result")
private List <getChallengeList> result;
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public List<getChallengeList> getResult() {
return result;
}
public void setResult(List<getChallengeList> result) {
this.result = result;
}
}
getChallengeList.java:
public class getChallengeList {
@SerializedName("token")
@Expose
private String token;
@SerializedName("serverTime")
@Expose
private String serverTime;
@SerializedName("expireTime")
@Expose
private String expireTime;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getServerTime() {
return serverTime;
}
public void setServerTime(String serverTime) {
this.serverTime = serverTime;
}
public String getExpireTime() {
return expireTime;
}
public void setExpireTime(String expireTime) {
this.expireTime = expireTime;
}
public getChallengeList(String tokens, String expireTimes, String serverTimes){
token = tokens;
expireTime = expireTimes;
serverTime = serverTimes;
}
}
邮递员回复:
{"success":true,"result":{"token":"5e2ab99eb318f","serverTime":1579858334,"expireTime":1579858634}}
在您的邮递员回复中,"result" return 一个 json 对象,但在您的 ManageChallenge.java 中。您将结果声明为对象列表。所以我认为它可能会在转换时导致一些错误。
PS。您应该在第一个字符处用大写字母声明您的 class 名称。否则,将来可能会造成一些混乱。
PS2。对不起我糟糕的英语水平。
根据您的回复,这里没有列表,因为问题在这里
@SerializedName("result")
private List<GetChallengeList> result;
改成这样
public class ManageChallenge {
@SerializedName("success")
private String success;
@SerializedName("result")
private GetChallengeList result;
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public GetChallengeList getResult() {
return result;
}
public void setResult(GetChallengeList result) {
this.result = result;
}
}
获取挑战列表class
public class GetChallengeList {
@SerializedName("token")
@Expose
private String token;
@SerializedName("serverTime")
@Expose
private String serverTime;
@SerializedName("expireTime")
@Expose
private String expireTime;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getServerTime() {
return serverTime;
}
public void setServerTime(String serverTime) {
this.serverTime = serverTime;
}
public String getExpireTime() {
return expireTime;
}
public void setExpireTime(String expireTime) {
this.expireTime = expireTime;
}
public GetChallengeList(String tokens, String expireTimes, String serverTimes){
token = tokens;
expireTime = expireTimes;
serverTime = serverTimes;
}
}
我不明白你正在使用改造并使用 json 对象获取响应,你可以直接将模型调用传递给改造,而不是使用模型调用轻松获取数据。 responce.body().challenge().getResult().toString()