【问题标题】:android : post data to webviewandroid:将数据发布到 webview
【发布时间】:2013-10-16 11:39:28
【问题描述】:

我正在使用 Webview 发送数据到交换邮件服务器。 (http post 不适用于带有大附件的邮件,因此尝试了这种方法)。

请看下面我的代码。

如果我发送完全没有编码的数据,发送失败。 如果我按照下面的代码对整个数据进行编码,它仍然会失败。

如果我尝试注释代码,我将数据存储为名称值对并对其进行编码,则会收到邮件但没有附件。那么在这里进行编码的正确方法是什么?附件的类型是 ContentBody 。所有其他参数都是字符串。

    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,);
            entity.addPart("hidid", new StringBody(hidid));
            entity.addPart("hidchk", new StringBody(hidchk));
            entity.addPart("hidcanary", new StringBody(canary));
           entity.addPart("attach", attachment);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            entity.writeTo(bytes);
            String fullUrl = baseUrl + "?ae=Dialog&t=Attach&a=Add";
        webView.postUrl(fullUrl, EncodingUtils.getBytes(bytes.toString(),"BASE64"));


          /*  List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 
            parameters.add(new BasicNameValuePair("hidid", hidid)); 
            parameters.add(new BasicNameValuePair("hidchk", hidchk)); 
            parameters.add(new BasicNameValuePair("hidcanary", canary)); 
            parameters.add(new BasicNameValuePair("attach", attachment.toString()));
            UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(parameters); 
String fullUrl = baseUrl + "?ae=Dialog&t=Attach&a=Add";
   webView.postUrl(fullUrl, EntityUtils.toByteArray(entity1)); */

我看到他的 Android WebView::postUrl 方法更难编码为 "application/x-www-form-urlencoded" 。

【问题讨论】:

  • 您在 logcat 中是否收到任何失败消息?
  • 是的,我得到错误响应:outlook web access 无法处理请求
  • 尝试在注释代码中将附件转换为base64

标签: android post encoding webview


【解决方案1】:
bytes.toString()

从你的字节创建一个字符串。请改用toBytesArray() 来获取字节[]

然后,EncodingUtils 使用 Charset 进行编码。 BASE64 不是字符集。 UTF-8 是。如果要对字节进行 Base64 编码,请使用 android.util.Base64.encode(byte[]);

在你的例子中:

webView.postUrl(fullUrl, Base64.encode(bytes.toByteArray(), Base64.DEFAULT));

【讨论】:

  • 这可能不是您的服务器期望数据的方式。
【解决方案2】:

根据blog post about using MultipartEntity to post data to a url,您可能需要在项目中包含一些额外的 jar 文件。它们包括以下 apache 开源项目:apache-mime4j、httpclient、httpcore 和 httpmime。

完成此操作后,您应该可以使用以下代码作为示例,将字符串和文件发布到 url:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.tumblr.com/api/write");

try {
  MultipartEntity entity = new MultipartEntity();

  entity.addPart("type", new StringBody("photo"));
  entity.addPart("data", new FileBody(image));
  httppost.setEntity(entity);
  HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}

【讨论】:

  • 我有所有这些,但是当我这样发送时服务器有大小限制。它以错误响应
  • 如果服务器有大小限制,你通过 webView 尝试它不会有任何区别!您有权访问服务器吗?
【解决方案3】:

尝试将您的附件转换为

 public static String encodeToBase64(String string)
    {
        String encodedString = "";
        try
        {
            byte[] byteData = null;
            if(Build.VERSION.SDK_INT >= 8) // Build.VERSION_CODES.FROYO --> 8
            {
                byteData = android.util.Base64.encode(string.getBytes(),android.util.Base64.DEFAULT);
            }
            else
            {
                byteData = Base64Utility.encode(string.getBytes(),Base64Utility.DEFAULT);
            }
            encodedString = new String(byteData);
        }
        catch (Exception e)
        {
        }
        return encodedString;
    }

转base64

【讨论】:

  • 我编辑了我的代码来做到这一点。但是再次收到没有附件的邮件。
  • parameters.add(new BasicNameValuePair("hidcanary", canary)); // parameters.add(new BasicNameValuePair("attach", attachment.toString())); parameters.add(new BasicNameValuePair("attach", encodeToBase64(attachment.toString()))); UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(参数);字符串 fullUrl = baseUrl + "?ae=Dialog&t=Attach&a=Add"; webView.postUrl(fullUrl,EntityUtils.toByteArray(entity1));
  • UrlEncodedFormEntity 我猜已经进行了编码,所以再次对附件进行编码有什么不同吗?
  • @preetha 您从哪里将附件添加到 webview 以及从哪里发送邮件?
  • 此代码用于上传附件。在这篇文章之后,我检查了回复,然后发送邮件
猜你喜欢
  • 2012-10-22
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多