我写了这些帖子:
How to manage multiple Async Tasks efficiently in Android
Running multiple AsyncTasks at the same time -- not possible?
但没有找到我的问题的答案,也许有人可以提供帮助..
我有Android应用程序,它使登录POST和获得json响应,
如果Json没问题,我需要POST另一个数据来获得另一个响应。
我已经扩展了Async Class,它将帖子发送到URL:
public class AsyncHttpPost extends AsyncTask<String, String, String> {
private HashMap<String, String> mData = null;
public AsyncHttpPost(HashMap<String, String> data) {
mData = data;
}
@Override
protected String doInBackground(String... params) {
byte[] result = null;
String str = "";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL
try {
ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
Iterator<String> it = mData.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
nameValuePair.add(new BasicNameValuePair(key, mData.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
result = EntityUtils.toByteArray(response.getEntity());
str = new String(result, "UTF-8");
}
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (Exception e) {
return null;
}
return str;
}
@Override
protected void onPostExecute(String result) {
try {
JSONArray Loginjson = new JSONArray(result);
strStt = Loginjson.getJSONObject(0).getJSONObject("fields").getString("status");
if (strStt.equals("ERR")) {
ErrorMsg("Authentication failed");
} else if (strStt.equals("OK")) {
ErrorMsg("Login OK!!!");
ClientPage();
} else {
ErrorMsg("Connection Error");
}
} catch (JSONException e) {
ErrorMsg("Connection Error");
}
}
}
现在 - 如果状态为Error,我需要再次发送POST。我需要制作另一个Async类吗?与所有程序相同?问题是只有onPostExecute部分不同..实际上“doInBackground”将始终是相同的..
任何想法如何在同一活动中轻松完成多个帖子?
答案 0 :(得分:0)
首先,由于您的doInBackground()
代码将始终保持不变,因此我建议您将其移至常规实用程序类中。
除此之外,您可以采用以下两种方式之一:
onPostExecute()
onPostExecute()
方法中检查,以查看需要在那里执行的代码。您必须在构造函数中传递标志,或者作为execute中的参数传递。答案 1 :(得分:0)
您可以使用AsyncHttpPost
构造函数/执行或全局变量中的参数来指示它是第一个还是第二个POST(换句话说 - 一个标志)。然后在AsyncHttpPost
中创建并执行onPostExecute
的另一个实例(仅当参数/变量设置为“first POST”时)。