如何在asynchttpclient a中使用javaandroidstudio中asynchttpclient的url数据列表循环asynchttpclient b?

wnavrhmk  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(142)

我想为来自客户机的每个url向来自detailclient(在客户机内部)的用户列表添加数据。
在mainactivity中创建:

progressBar = findViewById(R.id.bar_progress);
    etSearch = findViewById(R.id.et_search);
    ibSearch = findViewById(R.id.ib_search);

    RecyclerView rvItem = findViewById(R.id.rv_item);

    adapter = new UserAdapter();
    adapter.notifyDataSetChanged();
    rvItem.setAdapter(adapter);
    rvItem.setLayoutManager(new LinearLayoutManager(this));

    ibSearch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String search = etSearch.getText().toString();
            if (TextUtils.isEmpty(search)) return;
            showLoading(true);
            setSearchUser(search);

        }
    });

在主活动中显示加载:

private void showLoading(Boolean state) {
    if (state) {
        progressBar.setVisibility(View.VISIBLE);
    } else {
        progressBar.setVisibility(View.GONE);
    }
}

设置mainactivity中的搜索代码:

public void setSearchUser(final String searchName) {

    String url = "https://api.github.com/search/users?q=" + searchName;

    AsyncHttpClient client = new AsyncHttpClient();
    client.get(url, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            Log.d("Exception", throwable.getMessage());
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, String responseString) {
            Log.d(TAG, "client onSuccess");

            try {
                JSONObject obj = new JSONObject(responseString);
                JSONArray items = obj.getJSONArray("items");

                for (int i = 0; i < items.length(); i++) {
                    JSONObject itemObj = items.getJSONObject(i);
                    String detailUrl = itemObj.getString("url");

                    getDetail(detailUrl);

                }

                adapter.setData(listItems);
                showLoading(false);

            }

            catch (Exception e) {
                Log.d("Exception", e.getMessage());
            }

        }
    });
}

mainactivity中的getdetail代码:

public void getDetail(String url) {
    AsyncHttpClient detailClient = new AsyncHttpClient();
    detailClient.get(url, new TextHttpResponseHandler() {

        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            Log.d("Exception", throwable.getMessage());
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, String responseString) {
            Log.d(TAG, "detailClient onSuccess");

            try {
                JSONObject resObj = new JSONObject(responseString);
                User user = new User();
                user.setLogin(resObj.getString("login"));
                user.setAvatarUrl(resObj.getString("avatar_url"));
                user.setFollowersUrl(resObj.getString("followers_url"));
                user.setFollowingUrl(resObj.getString("following_url"));
                user.setName(resObj.getString("name"));
                user.setBlog(resObj.getString("blog"));
                user.setCompany(resObj.getString("company"));
                user.setRepos(resObj.getInt("public_repos"));
                user.setGists(resObj.getInt("public_gists"));
                user.setFollowersNum(resObj.getInt("followers"));
                user.setFollowingNum(resObj.getInt("following"));

                Log.d("Detail Name", user.getName());

                listItems.add(user);

            } catch (Exception e) {
                Log.d("Exception", Objects.requireNonNull(e.getMessage()));
            }
        }
    });
}

useradapter中的setdata:

public void setData(ArrayList<User> items) {
Log.d(TAG, "setData: called.");
mData.clear();
mData.addAll(items);
notifyDataSetChanged();
}

第一次单击imagebutton ibsearch时,没有任何更改,第二次,调用useradapter中的onbindviewholder。第三次将视图与“之前”视图堆叠。
我认为问题是因为asynchttpclient内部的listitem与asynchttpclient外部的listitem不同。那么,如何使asynchttpclient内部的listitem与外部的listitem相同,并从循环asynchttpclient获取数据呢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题