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来了解请求是否正确。