gpt4 book ai didi

java - 异步任务: Two values to AsyncTask and process in doInBackground

转载 作者:太空宇宙 更新时间:2023-11-04 13:24:34 25 4
gpt4 key购买 nike

我正在尝试将值存储到我的数据库中,并且我正在使用 AsyncTask 来执行此过程。我从网络服务器提取数据并通过将 Json 数组发送到异步来存储它们数据库,然后提取值并存储它们。我正在 for 循环中设置它。

现在这些记录有时会有子记录。识别本地数据库中的子记录。我添加了另一个名为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)?我该如何做到这一点以反射(reflect)在 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(不知道要更改什么来反射(reflect) 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 (在我上面的代码“详细信息”中)和字符串值(parent_ID),因为它是最终值..

不知道如何去做?

最佳答案

AsyncTasks 是对象,因此您始终可以使用构造函数隐藏一些额外的数据。

private class AddSubRecAsyncTask extends AsyncTask<JSONArray, Void, String> {
final String mId;
public AddSubRecAsyncTask(String id) {
mId = id;
}
...

然后您就可以在 doInBackground 方法中自由使用 mId 了。调用类似,

new AddSubRecAsyncTask(parent_ID).execute(details);

另一种常见方法是在您需要的地方将 AsyncTask 创建为匿名对象,而不是命名类。然后它可以访问包含类的所有成员变量和包含方法中的最终字段。该方法重用的机会较少,但在某些情况下很有用。

关于java - 异步任务: Two values to AsyncTask and process in doInBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32792803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com