Android to CodeIgniter如何接收块数据

时间:2016-01-06 07:46:30

标签: android web data-compression

目前正在使用:

  • Android:Api等级19
  • 的EasyPHP

我的问题:

我有一个JSON数据,我想要做的就是GZIP并将其发送到我的web API,该API由codeigniter运行并整理其数据。当我发送JSON数据时,我的Web API运行良好但是当我发送GZIP数据然后将其分块时,我甚至无法从我的Web API接收数据,或者它应该是因为我的网络。

该项目的核心开发是在移动应用程序中收集信息,我认为它非常大,因为它实际上可以测量高达10兆字节,这是整个过程的缩小。当发送到我的服务器这对最终用户方面不利时,现在我希望它的JSON数据是GZIP然后我希望将这些数据的发送分块,以便它感觉更快并且像以前一样优化。

Android代码:

    private void addTaskInThreadPool(final ClassEntry entry) {

      try {
          List<NameValuePair> pairs = new ArrayList<NameValuePair>();
          String s = "{\"entry\":" + gson.toJson(entry) + "}";
          pairs.add(new BasicNameValuePair("token", user.token));
          pairs.add(new BasicNameValuePair("data", s));
          threadPool.addTask(new ClientPostRequest.Builder(ClassSend.this,
                  GeneralResponse.class,Utils.getbaseUrl(ClassSend.this) + "survey/submit_entry/",
                pairs) {

                  @Override
                  public Object doInBackground(Object result) { 
                        return result;                              
                  }

                  @Override
                  public void onPostExecute(Object result) {

                  }

           }.showProgressBar(false).showToast(true).build());

      } catch(ClassCastException e) {
          Log.e("threadBackGround ClassCast", "Error: " + e);
      }
   }        

有人能帮助我吗?我的项目和研究需要这个。我需要你的建议,评论家,我非常感谢你提升我的编程技巧我仍然是这个的新手我需要我的同伴SO伙伴帮我解决我的问题。

1 个答案:

答案 0 :(得分:0)

刚刚在我的方法AddTaskInThreadPool

中添加了这段代码
        String s = "{\"entry\":" + gson.toJson(unsyncedEntry) + "}";
        StringEntity entityForPost = new StringEntity(s);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
            gzos.write(entityForPost.toString().getBytes("UTF8"));
            gzos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        byte[] fooGzippedBytes = baos.toByteArray();
        String encodeBytes = Base64.encode(fooGzippedBytes);
        pairs.add(new BasicNameValuePair("token", user.token));
        pairs.add(new BasicNameValuePair("data", s));

它有效。