我正在尝试将值存储到我的数据库中,而我正在使用AsyncTask来执行此过程。我从Web服务器提取数据并通过将Json数组发送到异步然后提取值并存储它们来存储它们。我正在为Loop设置它。
现在这些记录有时会有子记录。识别我的localDB中的子记录。我正在添加另一个名为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
我想发送parent_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(在上面的代码&#34;详细信息&#34;)和String值(parent_ID),因为它是最终值..
不确定如何做到这一点?
答案 0 :(得分:0)
我之前有过一种方式,也许不是最好的方式。
您可以创建一个类来包含您要发送到AsyncTask的所有信息,如下所示:
class ProcessTicket {
public final String parentId;
public final JSONArray data;
}
然后AsyncTask可以写成:
private class AddSubRecAsyncTask extends AsyncTask<ProcessTicket, Void, String> {
protected String doInBackground(ProcessTicket... params){
...
}
}
然后你可以在doInBackground函数中取代你想要的参数。
答案 1 :(得分:0)
AsyncTasks
是对象,因此您可以随时使用构造函数隐藏一些额外的数据。
private class AddSubRecAsyncTask extends AsyncTask<JSONArray, Void, String> {
final String mId;
public AddSubRecAsyncTask(String id) {
mId = id;
}
...
然后您可以在mId
方法中使用doInBackground
。调用类似,
new AddSubRecAsyncTask(parent_ID).execute(details);
另一种常见方法是在您需要的位置创建AsyncTask
作为匿名对象,而不是命名类。然后它可以访问contains类的所有成员变量和contains方法中的final字段。使用该方法重用的机会较少,但在某些情况下很有用。