如何在Java和Android Studio中使用Retrofit从多个数组中获取数据?

huangapple 未分类评论46阅读模式
英文:

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&lt;List&lt;User&gt;&gt; usercall = api.getUsers();

    usercall.enqueue(new Callback&lt;List&lt;User&gt;&gt;() {
        @Override
        public void onResponse(@NotNull Call&lt;List&lt;User&gt;&gt; call, @NotNull Response&lt;List&lt;User&gt;&gt; response) {
            List&lt;User&gt; userList = response.body();
            userAdapter = new UserAdapter(MainActivity.this, userList);
             listView.setAdapter(userAdapter);

        }

        @Override
        public void onFailure(@NotNull Call&lt;List&lt;User&gt;&gt; call, @NotNull Throwable t) {

        }
    });

}
private void getPosts(){
    Call&lt;List&lt;Post&gt;&gt; postcall = api.getPosts();


    postcall.enqueue(new Callback&lt;List&lt;Post&gt;&gt;() {
        @Override
        public void onResponse(@NotNull Call&lt;List&lt;Post&gt;&gt; call, @NotNull Response&lt;List&lt;Post&gt;&gt; response) {
            List&lt;Post&gt; postList = response.body();
            postAdapter = new PostAdapter(MainActivity.this, postList);
            listView.setAdapter(postAdapter);
        }

        @Override
        public void onFailure(Call&lt;List&lt;Post&gt;&gt; call, Throwable t) {

        }
    });
}



public class PostAdapter extends BaseAdapter {

private Context context;
private Post post;
private User user;
private List&lt;Post&gt; dataModelArrayList;

public PostAdapter(MainActivity context, List&lt;Post&gt; 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(&quot;SetTextI18n&quot;)
@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(&quot;Username: &quot;+dataModelArrayList.get(position).getUser());
    holder.title.setText(&quot;Title: &quot;+dataModelArrayList.get(position).getTitle());
    holder.body.setText(&quot;Body: &quot;+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&lt;User&gt; dataModelArrayList;

public UserAdapter(Context context, List&lt;User&gt; 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(&quot;SetTextI18n&quot;)
@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(&quot;Username: &quot;+dataModelArrayList.get(position).getUsername());
   // holder.title.setText(&quot;ID: &quot;+dataModelArrayList.get(position).getPost());
   holder.body.setText(&quot;ID: &quot;+dataModelArrayList.get(position).getId());



    return convertView;
}

private class ViewHolder {

    protected TextView username, id, title, body;
}

huangapple
  • 本文由 发表于 2020年4月5日 22:51:40
  • 转载请务必保留本文链接:https://java.coder-hub.com/61044475.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定