java - 是否可以在不同的 Activity 中使用多个 AsyncTask 将数据发布到服务器(Android)?

标签 java android android-asynctask

我在 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/

相关文章:

java - 如何在 Junit 4 中自定义 TestSuite 测试?

javascript - 为什么 showModal 在 iOS 中显示全屏?

java - 在运行时从 jar 文件加载的类上查找类

java - 将 Zip 文件写入 GAE Blobstore

java - 空指针异常 roster.delete(nationalID);

android - 我得到 -1 文件长度 asynctask android 下载

java - 通过传递导致应用程序失败的值来一个接一个地调用异步任务以进行 Web 服务调用

java - 解析 AsyncTask 时出错

java - 如何在 spring web-flux Controller 中接收 GET 请求的多部分或有效负载数据

java - ZeroConf 浏览器中未找到 JmDNS 服务