SyncHttpClient和AsyncHttpClient

时间:2014-12-31 07:03:01

标签: android loopj asynchttpclient

我想知道为什么我可以使用AsyncHttpClient成功将文件上传到服务器,但在使用SyncHttpClient时则不能。

以下设置产生成功结果:

  1. MultipartEntityBuilder构建我的分段上传请求+ AsyncHttpClient以发布它。点击活动中的按钮即可触发发布请求。
  2. 但是,因为我想在IntentService上传,我使用SyncHttpClient,并且以下设置无法成功上传文件。

    1. MultipartEntityBuilder + SyncHttpClient + IntentService
    2. 下面是我如何构建和发送我的请求,这在设置1和2中是相同的。upload方法放在一个帮助器类中。并且在单个实例上调用,在构造时它的mContext也被设置。 client是辅助类的静态实例变量; client在设置1中为AsyncHttpClient,在设置2中为SyncHttpClient

      // MyUploadHelper.java
      
      public void upload(File f) {
          String fileName = file.getName();
      
          MultipartEntityBuilder builder = MultipartEntityBuilder.create();
          builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
          builder.addTextBody("api", "SYNO.FileStation.Upload");
          // some more addTextBody omitted
          builder.addBinaryBody("filename", file, ContentType.APPLICATION_OCTET_STREAM, fileName);
      
          HttpEntity entity = builder.build();
      
          client.post(mContext, getAbsoluteUrl(),
                      entity, "multipart/form-data",
                      new JsonHttpResponseHandler() {
                          @Override
                          public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                              // This part can be reached in both settings. But in setting 2, the server returns "Unknown error of file operation".
                          }
                      });
      }
      

      该方法以这种方式调用:

      MyUploadHelper.getInstance(this).upload(aFile);
      

      其中this在设置1中为Activity,在设置2中为IntentService

      最后,提前新年快乐!

0 个答案:

没有答案