Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应为BEGIN_阵列,但为BEGIN_对象Android改装_Android_Json_Retrofit_Retrofit2 - Fatal编程技术网

应为BEGIN_阵列,但为BEGIN_对象Android改装

应为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")

我在我的应用程序中使用改型将数据从JSON读取到我的应用程序。我有这个JSON。(我尝试了很多解决方案,但都不管用)。请帮我解决这个问题。我对其他JSON使用了相同的代码,它可以处理这个问题,但不能处理我的JSON

JSON

我的界面:

    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();