java Asynctask:doInBackground中Asynctask和process的两个值
我正在尝试将值存储到我的数据库中,并使用AsyncTask来完成此过程。我从Web服务器中提取数据,并通过向async发送Json数组将其存储到DB,然后提取值并存储它们。我正在为循环设置这个
现在这些记录有时有子记录。识别本地数据库中的子记录。我正在添加另一个名为parentID的字段,因此我试图将parentID与jsonarray一起发送到AsyncTask。我不知道怎么做
以下是我迄今为止所做的:
private void getSubRecords(String recordID2)
{
final String parent_ID = recordID2;
final RequestParams requestParams = new RequestParams();
requestParams.put("RecId", recordID2);
final String urlforsubrec = getResources().getString(R.string.subreclink);
AsyncHttpClient client = new AsyncHttpClient();
client.post(urlforsubrec , requestParams, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
success = response.getInt(TAG_SUCCESS);
if (success == Integer.parseInt(getResources().getString(R.string.successvalue))) {
details = response.getJSONArray(TAG_DETAIL);
new AddSubRecordAsyncTask().execute(details); //Need to send parentID String
我想发送家长ID和详细信息(JsonArray)?如何在AsyncTask中反映这一点强>
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
Log.e("Error","Check internet"); }
});
}
下面是asyncTask(不确定要更改什么以同时反映JsonArray和String)
private class AddSubRecAsyncTask extends AsyncTask<JSONArray, Void, String>
{
@Override
protected String doInBackground(JSONArray... params)
{
for (int i = 0; i < params[0].length(); i++)
{
try
{
JSONObject c = details.getJSONObject(i);
riD = c.getString(TAG_RID);
rnAme = c.getString(TAG_RNAME);
rcHild = c.getString(TAG_RCHILD);
localDB.setSubRecDetails(riD, rnAme, rcHild, rcAtegory, parent_ID);
if (rcHild.equalsIgnoreCase(getResources().getString(R.string.subvalue))) {
getSubRecords(riD);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
return null;
}
protected void onPostExecute(String object)
{
Log.e("All", "Done");
}
}
}
我想发送JsonArray(在我上面的代码“details”中)和字符串值(parent_ID),因为它是最终值
不知道该怎么做
# 1 楼答案
AsyncTasks
是对象,所以你总是可以用构造函数偷偷带一些额外的数据进来然后,您可以在
doInBackground
方法中自由使用mId
。比如说新建AddSubRecAsyncTask(父项ID)。执行(细节)
另一种常见的方法是在需要的地方将
AsyncTask
创建为匿名对象,而不是命名类。然后它可以访问contain类的所有成员变量和containing方法中的final字段。这种方法的重用机会较小,但在某些情况下很有用# 2 楼答案
我以前用过一种方法,也许不是最好的
您可以创建一个类来包含要发送到AsyncTask的所有信息,如下所示:
然后,可以将AsyncTask编写为:
然后可以在doInBackground函数中提取所需的参数