Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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/3/apache-spark/5.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
Android 如何访问此代码中改装响应的子数组?_Android_Json_Gson_Retrofit_Retrofit2 - Fatal编程技术网

Android 如何访问此代码中改装响应的子数组?

Android 如何访问此代码中改装响应的子数组?,android,json,gson,retrofit,retrofit2,Android,Json,Gson,Retrofit,Retrofit2,我是一个完全的改型初学者。我试图在使用改型注释时做出以下回应 响应: {"status":"1", "data":[{"title":"hb","rate":"12", "pic":[{"file_name":"x"},{"file_name":"y"}]} {"title":"hk","rate":"15",

我是一个完全的改型初学者。我试图在使用改型注释时做出以下回应

响应:

{"status":"1",
              "data":[{"title":"hb","rate":"12",
                                               "pic":[{"file_name":"x"},{"file_name":"y"}]}
                     {"title":"hk","rate":"15",
                                              "pic":[{"file_name":"x"},{"file_name":"y"}]}                                              
                     {"title":"hc","rate":"18",
                                              "pic":[{"file_name":"x"},{"file_name":"y"}]}

                    ]                       
}                   
为此,我编写了代码以在recycler视图中显示它。 通过编写以下代码,我可以获得数据对象的元素,但无法访问响应的pic对象的元素。 我应该在代码中编辑什么才能访问pic对象的元素?

{"status":"1",
              "data":[{"title":"hb","rate":"12",
                                               "pic":[{"file_name":"x"},{"file_name":"y"}]}
                     {"title":"hk","rate":"15",
                                              "pic":[{"file_name":"x"},{"file_name":"y"}]}                                              
                     {"title":"hc","rate":"18",
                                              "pic":[{"file_name":"x"},{"file_name":"y"}]}

                    ]                       
}                   
Book_Hotel.java:

public class Book_Hotel extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private Recycler_Adapter adapter;
    private Api_Contact con;
    private Api_Interface apiInterface;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_book__hotel, container, false);
        getActivity().setTitle("Room List");
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        apiInterface = Api_Client.getApiClient().create(Api_Interface.class);
        Call<Api_Contact> call = apiInterface.getContacts();
        call.enqueue(new Callback<Api_Contact>() {
            @Override
            public void onResponse(Call<Api_Contact> call, Response<Api_Contact> response) {
                con = response.body();
                Log.e("data", con.getData().toString());
                adapter = new Recycler_Adapter(getActivity(), con.getData());
                recyclerView.setAdapter(adapter);

            }
            @Override
            public void onFailure(Call<Api_Contact> call, Throwable t) {
                Log.e("fail", t.toString());

                if (t.toString().contains(" Unable to resolve")) {
                    Toast.makeText(getActivity(), "Internet connect prob", Toast.LENGTH_SHORT).show();
                }
            }
        });
        return view;
    }
}
public class Api_Client {
    public static final String BASE_URL="xxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public static Retrofit retrofit = null;
    public static  Retrofit getApiClient(){
        if(retrofit==null){
            retrofit=new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
            Log.e("in client",retrofit.toString());
        }
        return retrofit;
    }
}
public class Api_Contact {
    @SerializedName("status")
    private String Status;
    @SerializedName("data")
    private List<data> Data;
    public String getStatus() {
        return Status;
    }

    public List<data> getData() {
        Log.e("in get data of contact", Data.toString());
        return Data;
    }
}
public interface  Api_Interface{
    @GET("xxxxxxx")
    Call<Api_Contact> getContacts();
}
public class Recycler_Adapter extends RecyclerView.Adapter<Recycler_Adapter.MyViewHolder> {
    private List<data> data;
    Context context;
    public Recycler_Adapter(Context context, List<data> contacts) {
        this.context = context;
        this.data = contacts;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.roomlist_row, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(Recycler_Adapter.MyViewHolder holder, int position) {

        holder.title.setText(data.get(position).getTitle());
        holder.price.setText(data.get(position).getRate());
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title, price;
        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.awesom);
            price = (TextView) itemView.findViewById(R.id.rate);
        }
    }
}
Api\u Contact.java:

public class Book_Hotel extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private Recycler_Adapter adapter;
    private Api_Contact con;
    private Api_Interface apiInterface;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_book__hotel, container, false);
        getActivity().setTitle("Room List");
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        apiInterface = Api_Client.getApiClient().create(Api_Interface.class);
        Call<Api_Contact> call = apiInterface.getContacts();
        call.enqueue(new Callback<Api_Contact>() {
            @Override
            public void onResponse(Call<Api_Contact> call, Response<Api_Contact> response) {
                con = response.body();
                Log.e("data", con.getData().toString());
                adapter = new Recycler_Adapter(getActivity(), con.getData());
                recyclerView.setAdapter(adapter);

            }
            @Override
            public void onFailure(Call<Api_Contact> call, Throwable t) {
                Log.e("fail", t.toString());

                if (t.toString().contains(" Unable to resolve")) {
                    Toast.makeText(getActivity(), "Internet connect prob", Toast.LENGTH_SHORT).show();
                }
            }
        });
        return view;
    }
}
public class Api_Client {
    public static final String BASE_URL="xxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public static Retrofit retrofit = null;
    public static  Retrofit getApiClient(){
        if(retrofit==null){
            retrofit=new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
            Log.e("in client",retrofit.toString());
        }
        return retrofit;
    }
}
public class Api_Contact {
    @SerializedName("status")
    private String Status;
    @SerializedName("data")
    private List<data> Data;
    public String getStatus() {
        return Status;
    }

    public List<data> getData() {
        Log.e("in get data of contact", Data.toString());
        return Data;
    }
}
public interface  Api_Interface{
    @GET("xxxxxxx")
    Call<Api_Contact> getContacts();
}
public class Recycler_Adapter extends RecyclerView.Adapter<Recycler_Adapter.MyViewHolder> {
    private List<data> data;
    Context context;
    public Recycler_Adapter(Context context, List<data> contacts) {
        this.context = context;
        this.data = contacts;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.roomlist_row, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(Recycler_Adapter.MyViewHolder holder, int position) {

        holder.title.setText(data.get(position).getTitle());
        holder.price.setText(data.get(position).getRate());
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title, price;
        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.awesom);
            price = (TextView) itemView.findViewById(R.id.rate);
        }
    }
}
公共类Api\u联系人{
@序列化名称(“状态”)
私有字符串状态;
@SerializedName(“数据”)
私人名单数据;
公共字符串getStatus(){
返回状态;
}
公共列表getData(){
Log.e(“在获取联系人数据中”,data.toString());
返回数据;
}
}
Api\u Interface.java:

public class Book_Hotel extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private Recycler_Adapter adapter;
    private Api_Contact con;
    private Api_Interface apiInterface;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_book__hotel, container, false);
        getActivity().setTitle("Room List");
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        apiInterface = Api_Client.getApiClient().create(Api_Interface.class);
        Call<Api_Contact> call = apiInterface.getContacts();
        call.enqueue(new Callback<Api_Contact>() {
            @Override
            public void onResponse(Call<Api_Contact> call, Response<Api_Contact> response) {
                con = response.body();
                Log.e("data", con.getData().toString());
                adapter = new Recycler_Adapter(getActivity(), con.getData());
                recyclerView.setAdapter(adapter);

            }
            @Override
            public void onFailure(Call<Api_Contact> call, Throwable t) {
                Log.e("fail", t.toString());

                if (t.toString().contains(" Unable to resolve")) {
                    Toast.makeText(getActivity(), "Internet connect prob", Toast.LENGTH_SHORT).show();
                }
            }
        });
        return view;
    }
}
public class Api_Client {
    public static final String BASE_URL="xxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public static Retrofit retrofit = null;
    public static  Retrofit getApiClient(){
        if(retrofit==null){
            retrofit=new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
            Log.e("in client",retrofit.toString());
        }
        return retrofit;
    }
}
public class Api_Contact {
    @SerializedName("status")
    private String Status;
    @SerializedName("data")
    private List<data> Data;
    public String getStatus() {
        return Status;
    }

    public List<data> getData() {
        Log.e("in get data of contact", Data.toString());
        return Data;
    }
}
public interface  Api_Interface{
    @GET("xxxxxxx")
    Call<Api_Contact> getContacts();
}
public class Recycler_Adapter extends RecyclerView.Adapter<Recycler_Adapter.MyViewHolder> {
    private List<data> data;
    Context context;
    public Recycler_Adapter(Context context, List<data> contacts) {
        this.context = context;
        this.data = contacts;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.roomlist_row, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(Recycler_Adapter.MyViewHolder holder, int position) {

        holder.title.setText(data.get(position).getTitle());
        holder.price.setText(data.get(position).getRate());
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title, price;
        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.awesom);
            price = (TextView) itemView.findViewById(R.id.rate);
        }
    }
}
公共接口Api\u接口{
@获取(“XXXXXX”)
调用getContacts();
}
Recycler\u Adapter.java:

public class Book_Hotel extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private Recycler_Adapter adapter;
    private Api_Contact con;
    private Api_Interface apiInterface;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_book__hotel, container, false);
        getActivity().setTitle("Room List");
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        apiInterface = Api_Client.getApiClient().create(Api_Interface.class);
        Call<Api_Contact> call = apiInterface.getContacts();
        call.enqueue(new Callback<Api_Contact>() {
            @Override
            public void onResponse(Call<Api_Contact> call, Response<Api_Contact> response) {
                con = response.body();
                Log.e("data", con.getData().toString());
                adapter = new Recycler_Adapter(getActivity(), con.getData());
                recyclerView.setAdapter(adapter);

            }
            @Override
            public void onFailure(Call<Api_Contact> call, Throwable t) {
                Log.e("fail", t.toString());

                if (t.toString().contains(" Unable to resolve")) {
                    Toast.makeText(getActivity(), "Internet connect prob", Toast.LENGTH_SHORT).show();
                }
            }
        });
        return view;
    }
}
public class Api_Client {
    public static final String BASE_URL="xxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public static Retrofit retrofit = null;
    public static  Retrofit getApiClient(){
        if(retrofit==null){
            retrofit=new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
            Log.e("in client",retrofit.toString());
        }
        return retrofit;
    }
}
public class Api_Contact {
    @SerializedName("status")
    private String Status;
    @SerializedName("data")
    private List<data> Data;
    public String getStatus() {
        return Status;
    }

    public List<data> getData() {
        Log.e("in get data of contact", Data.toString());
        return Data;
    }
}
public interface  Api_Interface{
    @GET("xxxxxxx")
    Call<Api_Contact> getContacts();
}
public class Recycler_Adapter extends RecyclerView.Adapter<Recycler_Adapter.MyViewHolder> {
    private List<data> data;
    Context context;
    public Recycler_Adapter(Context context, List<data> contacts) {
        this.context = context;
        this.data = contacts;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.roomlist_row, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(Recycler_Adapter.MyViewHolder holder, int position) {

        holder.title.setText(data.get(position).getTitle());
        holder.price.setText(data.get(position).getRate());
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title, price;
        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.awesom);
            price = (TextView) itemView.findViewById(R.id.rate);
        }
    }
}
公共类回收器\u适配器扩展了RecyclerView.Adapter{
私人名单数据;
语境;
公共回收器\u适配器(上下文、列表联系人){
this.context=上下文;
这个数据=联系人;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.roomlist_行,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(回收器\适配器.MyViewHolder,int位置){
holder.title.setText(data.get(position.getTitle());
holder.price.setText(data.get(position.getRate());
}
@凌驾
public int getItemCount(){
返回data.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
文本视图标题、价格;
公共MyViewHolder(查看项目视图){
超级(项目视图);
title=(TextView)itemView.findViewById(R.id.awesom);
price=(TextView)itemView.findViewById(R.id.rate);
}
}
}
请帮我解决这个问题。我们将不胜感激。谢谢。您需要这样做:

public class Api_Contact {
  @SerializedName("status")
  private String status;
  @SerializedName("data")
  private List<Data> data;

  public String getStatus() {
    return status;
  }

  public List<Data> getData() {
    Log.e("in get data of contact", data.toString());
    return data;
  }

}

你能发布你的
数据
类的代码吗?已经发布了。我没有看到类似的类定义:
公共类数据{…}
来自服务器的数据存储在con(Api_Contact.java的对象)(参见书中的\u Hotel.java文件的onResponse方法)。是的,我知道这一点,但是现在如何在onResponse方法中获取数据,就像现在我已经添加了数据对象数组的代码,但是我如何访问pic对象元素。如果你确实这样做了,你只需要调用response.body()就可以得到Api_Contact对象。要访问pic元素,您可以执行con.getData().get(index.getPicList().get(index)操作。我尝试过,但在该行上显示了NullPointerException。在witch调用中,您得到的是null指针吗?getBody()?getData()?getPicList()?确保您确实收到了带有这些字段的JSON,您可以使用Postman来了解请求是否正确。