我在 2 个不同的 Activity 中使用 2 个 AsyncTask,将数据发布到我的 Android 应用程序中的不同 URL。但是,只有第一个 AsyncTask 的数据被发布到服务器。但正如我所看到的,第二个 AsyncTask 数据被存储到名称值对中它在我的日志中,但没有发布到服务器。任何人都可以帮助解决这个问题吗?
提前致谢。
这是我的第一个 AsyncTask
private class PostData extends AsyncTask<String, String, HttpResponse> {
protected HttpResponse doInBackground(String... params) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://application.easypani.com/app/customer/register");
HttpResponse response = null;
try {
// Add your data
Name = full_name.getText().toString();
Phonenumber = phone.getText().toString();
Email = email.getText().toString();
Password = password.getText().toString();
House = house.getText().toString();
Street = street.getText().toString();
Landmark = landmark.getText().toString();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("name", Name));
nameValuePairs.add(new BasicNameValuePair("phone", Phonenumber));
nameValuePairs.add(new BasicNameValuePair("email", Email));
nameValuePairs.add(new BasicNameValuePair("password", Password));
nameValuePairs.add(new BasicNameValuePair("house", House));
nameValuePairs.add(new BasicNameValuePair("area", Area));
nameValuePairs.add(new BasicNameValuePair("street", Street));
nameValuePairs.add(new BasicNameValuePair("landmark", Landmark));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.e("post_", nameValuePairs.toString());
// Execute HTTP Post Request
response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
return response;
}
}
这是我在另一个 Activity 中的第二个 AyncTask
private class PostOrder extends AsyncTask<String, Void, HttpResponse> {
protected HttpResponse doInBackground(String... params) {
// Create a new HttpClient and Post Header
HttpClient httpclient1 = new DefaultHttpClient();
HttpPost httppost1 = new HttpPost("http://application.easypani.com/app/customer/order");
HttpResponse response1 = null;
try {
// Add your data
List<NameValuePair> nameValuePairs1 = new ArrayList<NameValuePair>();
nameValuePairs1.add(new BasicNameValuePair("suppliername", SupplierName));
nameValuePairs1.add(new BasicNameValuePair("quantity", Quantity));
nameValuePairs1.add(new BasicNameValuePair("newdispenser", dispenserchecked));
nameValuePairs1.add(new BasicNameValuePair("newconnection", newconnectionchecked));
httppost1.setEntity(new UrlEncodedFormEntity(nameValuePairs1));
Log.e("post_order", nameValuePairs1.toString());
// Execute HTTP Post Request
response1 = httpclient1.execute(httppost1);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
return response1;
}
}
最佳答案
不要在每个 Activity 中创建 AsyncTask,而是创建一个可以从任何 Activity 或 fragment 调用的单独的 AsyncTask 类。
在这里,我为 AsyncTask 编写了一个单独的类,响应将通过接口(interface)到达 Activity 。
Click here to get the samples from drive
在您的 Activity 或 fragment 中实现该接口(interface),并重写该方法以在您的 Activity 或 fragment 中从服务器获取响应。
由于 SDK 23 不再支持 HttpClient,因此您需要在 libs 文件夹中导入 org.apache.http.legacy.jar(包含在驱动器中)文件。
但您可以使用 Google Volley,而不是使用 AsyncTask。
Volley 提供
- 多个并发网络连接。
- 自动调度网络请求。
- 具有标准 HTTP 缓存一致性的透明磁盘和内存响应缓存。
- 请求优先级。
- 取消请求 API。
- 强大的排序功能让您可以轻松地使用从网络异步获取的数据正确填充您的界面。
Volley Android Official documentation
Introduction to Volley
Volley Example Code
关于java - 是否可以在不同的 Activity 中使用多个 AsyncTask 将数据发布到服务器(Android)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061847/