英文:
How to get data from multiple arrays using retrofit in java and android studio?
问题
使用JSONPlaceholder虚拟API,如何仅通过在帖子数组中使用“userId”字段从用户数组中获取关于用户(“username”、“email”等)的信息?User类和Post类只包含getter和setter,没有特殊内容。我想要打印用户的用户名、电子邮件以及他的帖子的标题、正文和ID。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lv);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(JsonPlaceholderAPI.URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
api = retrofit.create(JsonPlaceholderAPI.class);
getPosts();
getUsers();
}
private void getUsers() {
Call<List<User>> usercall = api.getUsers();
usercall.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(@NotNull Call<List<User>> call, @NotNull Response<List<User>> response) {
List<User> userList = response.body();
userAdapter = new UserAdapter(MainActivity.this, userList);
listView.setAdapter(userAdapter);
}
@Override
public void onFailure(@NotNull Call<List<User>> call, @NotNull Throwable t) {
}
});
}
private void getPosts() {
Call<List<Post>> postcall = api.getPosts();
postcall.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(@NotNull Call<List<Post>> call, @NotNull Response<List<Post>> response) {
List<Post> postList = response.body();
postAdapter = new PostAdapter(MainActivity.this, postList);
listView.setAdapter(postAdapter);
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
}
});
}
public class PostAdapter extends BaseAdapter {
private Context context;
private Post post;
private User user;
private List<Post> dataModelArrayList;
public PostAdapter(MainActivity context, List<Post> dataModelArrayList) {
this.context = context;
this.dataModelArrayList = dataModelArrayList;
}
// ...(此处省略了其他方法和内容)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.retro_lv, null, true);
holder.userid = (TextView) convertView.findViewById(R.id.username);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.body = (TextView) convertView.findViewById(R.id.body);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText("Title: " + dataModelArrayList.get(position).getTitle());
holder.body.setText("Body: " + dataModelArrayList.get(position).getBody());
return convertView;
}
private class ViewHolder {
protected TextView id, username, userid, title, body;
}
}
public class UserAdapter extends BaseAdapter {
public Context context;
public List<User> dataModelArrayList;
public UserAdapter(Context context, List<User> dataModelArrayList) {
this.context = context;
this.dataModelArrayList = dataModelArrayList;
}
// ...(此处省略了其他方法和内容)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.retro_lv, null, true);
holder.username = (TextView) convertView.findViewById(R.id.username);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.body = (TextView) convertView.findViewById(R.id.body);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.username.setText("Username: " + dataModelArrayList.get(position).getUsername());
holder.body.setText("ID: " + dataModelArrayList.get(position).getId());
return convertView;
}
private class ViewHolder {
protected TextView username, id, title, body;
}
}
英文:
Im using JSONPlaceholder fake API, how can I get information about user ("username", "email" etc.) from users array by only using "userId" field in posts array? User class and Post class only contain getter and setters, nothing special. I want to print users username, email and title, body, and id of his posts.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lv);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(JsonPlaceholderAPI.URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
api = retrofit.create(JsonPlaceholderAPI.class);
getPosts();
getUsers();
}
private void getUsers(){
Call<List<User>> usercall = api.getUsers();
usercall.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(@NotNull Call<List<User>> call, @NotNull Response<List<User>> response) {
List<User> userList = response.body();
userAdapter = new UserAdapter(MainActivity.this, userList);
listView.setAdapter(userAdapter);
}
@Override
public void onFailure(@NotNull Call<List<User>> call, @NotNull Throwable t) {
}
});
}
private void getPosts(){
Call<List<Post>> postcall = api.getPosts();
postcall.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(@NotNull Call<List<Post>> call, @NotNull Response<List<Post>> response) {
List<Post> postList = response.body();
postAdapter = new PostAdapter(MainActivity.this, postList);
listView.setAdapter(postAdapter);
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
}
});
}
public class PostAdapter extends BaseAdapter {
private Context context;
private Post post;
private User user;
private List<Post> dataModelArrayList;
public PostAdapter(MainActivity context, List<Post> dataModelArrayList) {
this.context = context;
this.dataModelArrayList = dataModelArrayList;
}
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getCount() {
return dataModelArrayList.size();
}
@Override
public Object getItem(int position) {
return dataModelArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@SuppressLint("SetTextI18n")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.retro_lv, null, true);
holder.userid = (TextView) convertView.findViewById(R.id.username);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.body = (TextView) convertView.findViewById(R.id.body);
convertView.setTag(holder);
}else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)convertView.getTag();
}
// holder.userid.setText("Username: "+dataModelArrayList.get(position).getUser());
holder.title.setText("Title: "+dataModelArrayList.get(position).getTitle());
holder.body.setText("Body: "+dataModelArrayList.get(position).getBody());
return convertView;
}
private class ViewHolder {
protected TextView id, username, userid, title, body;
}
public class UserAdapter extends BaseAdapter {
public Context context;
public List<User> dataModelArrayList;
public UserAdapter(Context context, List<User> dataModelArrayList) {
this.context = context;
this.dataModelArrayList = dataModelArrayList;
}
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getCount() {
return dataModelArrayList.size();
}
@Override
public Object getItem(int position) {
return dataModelArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@SuppressLint("SetTextI18n")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.retro_lv, null, true);
holder.username = (TextView) convertView.findViewById(R.id.username);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.body = (TextView) convertView.findViewById(R.id.body);
convertView.setTag(holder);
}else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)convertView.getTag();
}
holder.username.setText("Username: "+dataModelArrayList.get(position).getUsername());
// holder.title.setText("ID: "+dataModelArrayList.get(position).getPost());
holder.body.setText("ID: "+dataModelArrayList.get(position).getId());
return convertView;
}
private class ViewHolder {
protected TextView username, id, title, body;
}
专注分享java语言的经验与见解,让所有开发者获益!
评论