我想为来自客户机的每个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获取数据呢?
暂无答案!
目前还没有任何答案,快来回答吧!