应为BEGIN_阵列,但为BEGIN_对象Android改装
我在我的应用程序中使用改型将数据从JSON读取到我的应用程序。我有这个JSON。(我尝试了很多解决方案,但都不管用)。请帮我解决这个问题。我对其他JSON使用了相同的代码,它可以处理这个问题,但不能处理我的JSON JSON 我的界面:应为BEGIN_阵列,但为BEGIN_对象Android改装,android,json,retrofit,retrofit2,Android,Json,Retrofit,Retrofit2,我在我的应用程序中使用改型将数据从JSON读取到我的应用程序。我有这个JSON。(我尝试了很多解决方案,但都不管用)。请帮我解决这个问题。我对其他JSON使用了相同的代码,它可以处理这个问题,但不能处理我的JSON JSON 我的界面: public interface SanaApi { String BASE_URL = "http://www.hhfoodies.com/salesnotifier/"; @GET("sana_safinaz.php")
public interface SanaApi {
String BASE_URL = "http://www.hhfoodies.com/salesnotifier/";
@GET("sana_safinaz.php")
Call<List<SanaSafinas>> getSana();
}
以下是主要活动:
public class MainActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listViewHeroes);
//calling the method to display the heroes
getSana();
}
private void getSana() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(SanaApi.BASE_URL)
.addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
.build();
SanaApi api = retrofit.create(SanaApi.class);
Call<List<SanaSafinas>> call = api.getSana();
call.enqueue(new Callback<List<SanaSafinas>>() {
@Override
public void onResponse(Call<List<SanaSafinas>> call, Response<List<SanaSafinas>> response) {
List<SanaSafinas> heroList = response.body();
//Creating an String array for the ListView
String[] heroes = new String[heroList.size()];
//looping through all the heroes and inserting the names inside the string array
for (int i = 0; i < heroList.size(); i++) {
heroes[i] = heroList.get(i).getSale_price();
}
//displaying the string array into listview
listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, heroes));
}
@Override
public void onFailure(Call<List<SanaSafinas>> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
public类MainActivity扩展了AppCompatActivity{
列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(listView)findViewById(R.id.listViewHeroes);
//调用方法以显示英雄
getSana();
}
私有void getSana(){
改装改装=新改装.Builder()
.baseUrl(SanaApi.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())//这里我们使用GsonConverterFactory将json数据直接转换为对象
.build();
SanaApi=reformation.create(SanaApi.class);
Call Call=api.getSana();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List=response.body();
//为ListView创建字符串数组
字符串[]英雄=新字符串[heroList.size()];
//循环遍历所有英雄并在字符串数组中插入名称
for(int i=0;i
您的改装调用需要一个从JSON数组生成的列表
您的JSON不是一个数组,而是一个对象,这就是您需要告诉改造的内容
class Response {
private final List<SanaSafinas> data;
public Response(List<SanaSafinas> data) {
this.data = data;
}
// Getter...
}
JSON数组用括号括起来,就像您的第一个url:
[
{
"name": "Captain America",
"realname": "Steve Rogers",
"team": "Avengers",
"firstappearance": "1941",
....
},
...
}
您的模型类没有正确创建,就好像您看到响应所有数据都进入data
JsonArray,并且您直接在那里工作一样,请更改您的模型类以使其正常工作
创建一个将包含您的响应的新类,让我们将其命名为ResponseSana
public class ResponseSana {
@SerializedName("message")
@Expose
private String message;
@SerializedName("status")
@Expose
private Integer status;
@SerializedName("data")
@Expose
private List< SanaSafinas > data = null;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public List< SanaSafinas > getData() {
return data;
}
public void setData(List< SanaSafinas > data) {
this.data = data;
}
}
公共类响应ana{
@SerializedName(“消息”)
@暴露
私有字符串消息;
@序列化名称(“状态”)
@暴露
私有整数状态;
@SerializedName(“数据”)
@暴露
私有列表data=null;
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
公共整数getStatus(){
返回状态;
}
公共void setStatus(整数状态){
这个状态=状态;
}
公共列表getData(){
返回数据;
}
公共无效设置数据(列表数据){
这个数据=数据;
}
}
你的界面应该是这样的
Call<ResponseSana> getSana();
调用getSana();
然后根据更改后的代码相应地更改onResponse,所有数据都将正常工作,不会出现错误。您的模型类没有正确创建,好像您看到了响应—所有数据都在数据JsonArray中,您直接在那里做工作,更改模型类以使其正常工作复制中的所有响应,它将自动创建模型类,目标为lang:java源类型:JSON注释样式:Gson,并选中include getter和setter
[
{
"name": "Captain America",
"realname": "Steve Rogers",
"team": "Avengers",
"firstappearance": "1941",
....
},
...
}
public class ResponseSana {
@SerializedName("message")
@Expose
private String message;
@SerializedName("status")
@Expose
private Integer status;
@SerializedName("data")
@Expose
private List< SanaSafinas > data = null;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public List< SanaSafinas > getData() {
return data;
}
public void setData(List< SanaSafinas > data) {
this.data = data;
}
}
Call<ResponseSana> getSana();