我有一类CheckList
。它有checkListId
,title
和CheckListItemArrayList
。
我有2个asyncTasks。一个GetCheckLists
另一个用于GetCheckListItems
。在CheckList
课程中,它有checkListId
的{{1}},Title
和arrayList
。
首先,我使用checkListItems
获取所有检查清单。现在,对于每个checkList,我调用GetCheckListAsyncTask
任务来获取所有GetCheckListItemsAsync
。
checkListItems
的{{1}}方法我想将onPostExecute
设置为GetCheckListItemsAsyncTask
的对象。
CheckListActivity:
checkListItemArrayList
要获取CheckList
的位置,我创建了一个迭代计数变量,并在public class CheckListActivity extends AppCompatActivity implements CheckListAdapter.OnItemClickListener{
public int iterationCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_list);
mIntent = getIntent();
checkListArrayList = new ArrayList<>();
tempCheckListIdList = new ArrayList<>();
mEventId = mIntent.getStringExtra("eventId");
mCheckList = new CheckList();
progressDialog = new ProgressDialog(CheckListActivity.this);
recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
mAdapter = new CheckListAdapter(checkListArrayList,CheckListActivity.this,CheckListActivity.this);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
GetCheckListAsyncTask getCheckListAsyncTask = new GetCheckListAsyncTask();
getCheckListAsyncTask.execute(mEventId);
}
public class GetCheckListsItemAsyncTask extends AsyncTask<String, Void, JSONObject> {
private String api;
private JSONObject jsonParams;
public GetCheckListsItemAsyncTask(){}
@Override
protected JSONObject doInBackground(String... params) {
try {
api = getResources().getString(R.string.server_url) + "api/checklist_items/getChecklistItems.php";
jsonParams = new JSONObject();
String checklistId = params[0]; // params[0] is username
jsonParams.put("checklistId", checklistId);
ServerRequest request = new ServerRequest(api, jsonParams);
return request.sendRequest();
} catch(JSONException je) {
return Excpetion2JSON.getJSON(je);
}
} //end of doInBackground
@Override
protected void onPostExecute(JSONObject response) {
super.onPostExecute(response);
Log.e("ServerResponse", response.toString());
try {
int result = response.getInt("result");
String message = response.getString("message");
if (result == 1) {
Toast.makeText(CheckListActivity.this, message, Toast.LENGTH_LONG).show();
//code after getting profile details goes here
checkListsItemArray = response.getJSONArray("checklistItems");
for (int i = 0; i < checkListsItemArray.length(); i++) {
int pendingTasks = 0,completedTasks = 0;
itemList = new ArrayList<>();
CheckListItem checkListItem = new CheckListItem();
JSONObject subObject = checkListsItemArray.getJSONObject(i);
String checkListItemName = subObject.getString("text");//name of the attribute in response
checkListItem.setTitle(checkListItemName);
checkListItem.setBudget(checkListItemBudget);
itemList.add(checkListItem);//adding string to arraylist
}
CheckList checkList = new CheckList();
for(int i = 0; i <= iterationCount; i++ ) {
String checkListId = checkListArrayList.get(iterationCount).getCheckListId();
checkListArrayList.get(iterationCount).setCheckListItemArrayList(itemList);
}
mAdapter.notifyDataSetChanged();
}
else {
//code after failed getting profile details goes here
}
} catch(JSONException je) {
}
} //end of onPostExecute
}
public class GetCheckListAsyncTask extends AsyncTask<String, Void, JSONObject> {
private String api;
private JSONObject jsonParams;
public GetCheckListAsyncTask(){}
@Override
protected JSONObject doInBackground(String... params) {
try {
api = getResources().getString(R.string.server_url) + "api/checklist/getChecklists.php";
jsonParams = new JSONObject();
String eventId = params[0]; // params[0] is username
jsonParams.put("eventId", eventId);
ServerRequest request = new ServerRequest(api, jsonParams);
return request.sendRequest();
} catch(JSONException je) {
return Excpetion2JSON.getJSON(je);
}
} //end of doInBackground
@Override
protected void onPostExecute(JSONObject response) {
super.onPostExecute(response);
//Log.e("ServerResponse", response.toString());
try {
int result = response.getInt("result");
String message = response.getString("message");
if (result == 1 ) {
Toast.makeText(CheckListActivity.this, message, Toast.LENGTH_LONG).show();
//code after getting profile details goes here
checkListArray = response.getJSONArray("checklists");
for (int i = 0; i < checkListArray.length(); i++) {
CheckList checkList = new CheckList();
JSONObject subObject = checkListArray.getJSONObject(i);
String checkListName = subObject.getString("checklist");//name of the attribute in response
checkList.setCheckListTitle(checkListName);
checkList.setBudget(checkListBudget);
checkListArrayList.add(checkList);
if(checkListArrayList.size() > iterationCount) {
String checkListId1 = checkListArrayList.get(iterationCount).getCheckListId();
new GetCheckListsItemAsyncTask().execute(checkListId1);
iterationCount ++;
}
mAdapter.notifyDataSetChanged();
}
else {
Toast.makeText(CheckListActivity.this, message, Toast.LENGTH_LONG).show();
//code after failed getting profile details goes here
if ((progressDialog != null) && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
} catch(JSONException je) {
}
} //end of onPostExecute
}
}
的{{1}}方法中将其递增。并尝试在checkListArrayList
中访问它并在arList的对象中设置arraylist。
但如果for GeckCheckListAsyncTask
的循环,它会使索引超出绑定异常。如何获取postExecute
索引以将GetCheckListItemsAsyncTask
设置为GetCheckListItemAsyncTask
的相同位置?
记录:
checkListArray
答案 0 :(得分:1)
更改为:
for(int i = 0; i < iterationCount; i++ ) {
String checkListId = checkListArrayList.get(i).getCheckListId();
checkListArrayList.get(i).setCheckListItemArrayList(itemList);
}
您正在将i
从0
重复到iterationCount
。但是,在内部循环中,您始终使用iterationCount
而不是i
答案 1 :(得分:0)
你应该改变
for(int i = 0; i <= iterationCount; i++ ) {
到这个
for(int i = 0; i < iterationCount; i++ ) {
数组中只有五个项目而不是六个,这就是崩溃的原因。