嗨,在下面的代码中,我有一个get方法,该方法使用reform库解析json响应。
对于下面的质询类,通过pojo类解析json响应,但响应不是来自服务器。
请任何一个人帮助解决这个问题回答:
{
success: true,
result: {
token: TOKENSTRING, // Challenge token to be used for login.
serverTime: TIMESTAMP, // Current Server time
expireTime: TIMESTAMP // Time when token expires
}
}
获取挑战.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();
}
});
}
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;
}
}
Postman 回复:
{"success":true,"result":{"token":"5e2ab99eb318f","serverTime":1579858334,"expireTime":1579858634}}
3条答案
按热度按时间yx2lnoni1#
在postman响应中,“result”返回一个json对象,但是在managechallenge.java中。将结果声明为对象列表。所以我认为这可能会导致一些错误的铸造。
你应该在第一个字符处用大写字母声明你的类名。如果没有,将来可能会引起一些混乱。
第2页。对不起,我的英语水平太差了。
nhaq1z212#
我不明白这一点,您使用的是refrofit并使用json对象获取响应,您可以直接将模型调用传递到refrofit中,然后使用模型调用轻松地获取数据。responce.body().challenge().getresult().tostring()
ndh0cuux3#
根据你的答复,这里没有关于这个问题的清单
换成这样
getchallengelist类