当我调用自己的API之一时,onRespone方法将返回一个空的response.body()。我之前多次遵循这种方法,但仍然有效,但是在这种情况下不起作用。这个api也可以在浏览器中使用。
我检查了所有事情:SerializedName标签,实现了我正在使用的Serializable,api方法中的所有类,...。我也尝试使用同步调用,但是它不起作用。
注意我如何从回调中获取response.body()值:我将变量声明为活动类字段,并为其分配response.body()。
我真的很困惑。有什么想法吗?
这些都是您需要的所有代码:
活动:
package com.example.amirmasoud.mgtools_2.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import com.example.amirmasoud.mgtools_2.GetDataService;
import com.example.amirmasoud.mgtools_2.R;
import com.example.amirmasoud.mgtools_2.RetrofitInstance;
import com.example.amirmasoud.mgtools_2.model.ToolsItem;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class ToolContentActivity extends AppCompatActivity {
private GetDataService service = RetrofitInstance.getRetrofitInstance().create(GetDataService.class);
private ToolsItem toolItem = new ToolsItem();
private int toolsItemId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tool_content);
Bundle bundle = new Bundle(getIntent().getExtras());
toolsItemId = bundle.getInt("toolItemId");
service.getToolItemContent(toolsItemId).enqueue(new Callback<ToolsItem>() {
@Override
public void onResponse(Call<ToolsItem> call, Response<ToolsItem> response) {
toolItem.mConstructor(response.body());
}
@Override
public void onFailure(Call<ToolsItem> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
}
型号:
package com.example.amirmasoud.mgtools_2.model;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Created by AmirMasoud on 12/9/2018.
*/
public class ToolsItem implements Serializable {
@SerializedName("MainTypeID")
private int mainTypeID = 0;
@SerializedName("Name")
private String persianName = "";
@SerializedName("ImageURL")
private String imageURL = "";
@SerializedName("EnglishName")
private String englishName = "";
@SerializedName("OtherName")
private String otherName = "";
@SerializedName("CountryID")
private int countryID = 0;
@SerializedName("Year")
private int year = 0;
@SerializedName("ComplexityName")
private String complexityName = "";
@SerializedName("RelatedMainTypeID")
private List<Integer> relatedMainTypeID = new ArrayList<>();
@SerializedName("IntroductionDescription")
private String introductionDescription = "";
@SerializedName("Pros")
private String pros = "";
@SerializedName("Cons")
private String cons = "";
@SerializedName("RequiredTime")
private int requiredTime = 0;
@SerializedName("RequiredEmployee")
private int requiredEmployee = 0;
@SerializedName("RequiredBudget")
private int requiredBudget = 0;
@SerializedName("RequiredKnowledge")
private int requiredKnowledge = 0;
@SerializedName("Applications")
private String applications = "";
@SerializedName("ComplementaryContent")
private List<CompContentToolItem> complementaryContent = new ArrayList<>();
public ToolsItem mConstructor(ToolsItem item) {
this.mainTypeID = item.getMainTypeID();
this.persianName = item.getPersianName();
this.englishName= item.getEnglishName();
this.imageURL = item.getImageURL();
this.otherName = item.getOtherName();
this.countryID = item.getCountryID();
this.year = item.getYear();
this.complexityName = item.getComplexityName();
this.relatedMainTypeID = item.getRelatedMainTypeID();
this.introductionDescription = item.getIntroductionDescription();
this.pros = item.getPros();
this.cons = item.getCons();
this.requiredTime = item.getRequiredTime();
this.requiredBudget = item.getRequiredBudget();
this.requiredEmployee = item.getRequiredEmployee();
this.requiredKnowledge = item.getRequiredKnowledge();
this.applications = item.getApplications();
this.complementaryContent = item.getComplementaryContent();
return this;
}
public String getEnglishName() {
return englishName;
}
public void setEnglishName(String englishName) {
this.englishName = englishName;
}
public String getOtherName() {
return otherName;
}
public void setOtherName(String otherName) {
this.otherName = otherName;
}
public int getCountryID() {
return countryID;
}
public void setCountryID(int countryID) {
this.countryID = countryID;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getComplexityName() {
return complexityName;
}
public void setComplexityName(String complexityName) {
this.complexityName = complexityName;
}
public List<Integer> getRelatedMainTypeID() {
return relatedMainTypeID;
}
public void setRelatedMainTypeID(List<Integer> relatedMainTypeID) {
this.relatedMainTypeID = relatedMainTypeID;
}
public String getIntroductionDescription() {
return introductionDescription;
}
public void setIntroductionDescription(String introductionDescription) {
this.introductionDescription = introductionDescription;
}
public String getPros() {
return pros;
}
public void setPros(String pros) {
this.pros = pros;
}
public String getCons() {
return cons;
}
public void setCons(String cons) {
this.cons = cons;
}
public int getRequiredTime() {
return requiredTime;
}
public void setRequiredTime(int requiredTime) {
this.requiredTime = requiredTime;
}
public int getRequiredEmployee() {
return requiredEmployee;
}
public void setRequiredEmployee(int requiredEmployee) {
this.requiredEmployee = requiredEmployee;
}
public int getRequiredBudget() {
return requiredBudget;
}
public void setRequiredBudget(int requiredBudget) {
this.requiredBudget = requiredBudget;
}
public int getRequiredKnowledge() {
return requiredKnowledge;
}
public void setRequiredKnowledge(int requiredKnowledge) {
this.requiredKnowledge = requiredKnowledge;
}
public String getApplications() {
return applications;
}
public void setApplications(String applications) {
this.applications = applications;
}
public List<CompContentToolItem> getComplementaryContent() {
return complementaryContent;
}
public void setComplementaryContent(List<CompContentToolItem> complementaryContent) {
this.complementaryContent = complementaryContent;
}
public int getMainTypeID() {
return mainTypeID;
}
public void setMainTypeID(int mainTypeID) {
this.mainTypeID = mainTypeID;
}
public String getPersianName() {
return persianName;
}
public void setPersianName(String persianName) {
this.persianName = persianName;
}
public String getImageURL() {
return imageURL;
}
public void setImageURL(String imageURL) {
this.imageURL = imageURL;
}
}
子模型:
package com.example.amirmasoud.mgtools_2.model;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
/**
* Created by AmirMasoud on 12/12/2018.
*/
public class CompContentToolItem implements Serializable {
@SerializedName("FileURL")
private String fileURL;
@SerializedName("Description")
private String description;
public String getFileURL() {
return fileURL;
}
public void setFileURL(String fileURL) {
this.fileURL = fileURL;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
服务:
public interface GetDataService {
@GET("GetMainTypeByID")
Call<ToolsItem> getToolItemContent(@Query("MainTypeID") int toolItemId);
}
改造实例:
public class RetrofitInstance {
private static final String BASE_URL = "https://assess.ir/service.svc/";
private static Retrofit retrofit;
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.client(UnsafeOkHttpClient.getUnsafeOkHttpClient())
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
.build();
}
return retrofit;
}
}
答案 0 :(得分:0)
首先,您必须使用GSON转换为json
service.getToolItemContent(toolsItemId).enqueue(new Callback<ToolsItem>() {
@Override
public void onResponse(Call<ToolsItem> call, Response<ToolsItem> response) {
Gson gson = new Gson();
String data = gson.toJson(response.body)
ToolsItem toolsItem = gson.fromJson(data,ToolsItem.class);
toolItem.mConstructor(response.body());
}
@Override
public void onFailure(Call<ToolsItem> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});