android:将数据发布到webview

android:将数据发布到webview,android,post,encoding,webview,Android,Post,Encoding,Webview,我正在使用Webview向exchange邮件服务器发送数据。(http post不适用于带有大附件的邮件,因此尝试此方法) 请看下面我的代码 如果发送数据时根本没有编码,则发送失败。 如果我按照下面的代码对整个数据进行编码,它仍然会失败 如果我尝试注释代码,将数据存储为name-valuepairs并进行编码,则会收到邮件,但没有附件。那么,在这里进行编码的正确方法是什么?附件的类型为ContentBody。所有其他参数都是字符串 MultipartEntity entity = ne

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

请看下面我的代码

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

如果我尝试注释代码,将数据存储为name-valuepairs并进行编码,则会收到邮件,但没有附件。那么,在这里进行编码的正确方法是什么?附件的类型为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)); */
MultipartEntity entity=新的MultipartEntity(HttpMultipartMode.BROWSER_兼容,);
entity.addPart(“hidid”,新的StringBody(hidid));
entity.addPart(“hidchk”,新的StringBody(hidchk));
实体.addPart(“hidcanary”,新的StringBody(canary));
实体。添加部分(“附件”,附件);
ByteArrayOutputStream字节=新建ByteArrayOutputStream();
实体写入(字节);
字符串fullUrl=baseUrl+“?ae=Dialog&t=Attach&a=Add”;
postrl(fullUrl,EncodingUtils.getBytes(bytes.toString(),“BASE64”);
/*列表参数=新的ArrayList();
添加(新的BasicNameValuePair(“hidid”,hidid));
添加(新的BasicNameValuePair(“hidchk”,hidchk));
添加(新的BasicNameValuePair(“hidcanary”,canary));
add(新的BasicNameValuePair(“attach”,attachment.toString());
UrlEncodedFormEntity entity1=新的UrlEncodedFormEntity(参数);
字符串fullUrl=baseUrl+“?ae=Dialog&t=Attach&a=Add”;
postrl(fullUrl,EntityUtils.toByteArray(entity1))*/
我看到,对于“application/x-www-form-urlencoded”,Android WebView::postrl方法的编码比较难

从字节创建字符串。使用
toBytesArray()
获取字节[]

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

在您的示例中:

webView.postUrl(fullUrl, Base64.encode(bytes.toByteArray(), Base64.DEFAULT));
从字节创建字符串。使用
toBytesArray()
获取字节[]

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

在您的示例中:

webView.postUrl(fullUrl, Base64.encode(bytes.toByteArray(), Base64.DEFAULT));
根据a,您可能需要在项目中包含一些额外的jar文件。它们包括以下apache开源项目:apache-mime4j、httpclient、httpcore和HttpTime

完成此操作后,您应该能够使用以下代码作为示例,将字符串和文件发布到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) {
}
根据a,您可能需要在项目中包含一些额外的jar文件。它们包括以下apache开源项目:apache-mime4j、httpclient、httpcore和HttpTime

完成此操作后,您应该能够使用以下代码作为示例,将字符串和文件发布到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) {
}

尝试将附件转换为

 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

 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

我有所有这些,但当我这样发送时,服务器有一个大小限制。如果服务器有大小限制,那么通过webView进行尝试不会有任何区别!您有权访问服务器吗?我有所有这些,但当我这样发送时,服务器有大小限制。如果服务器有大小限制,那么通过webView进行尝试不会有任何区别!您是否有权访问服务器?您是否在logcat中收到任何失败消息?是的,我收到的错误响应是:outlook web access无法处理请求尝试将附件转换为注释代码中的base64您是否在logcat中收到任何失败消息?是的,我收到的错误响应是:outlook web access无法处理请求尝试将附件转换为注释代码中的base64这可能不是服务器期望数据的方式。这可能不是服务器期望数据的方式。我编辑代码就是为了这样做的。但同样地,收到的邮件没有附件。parameters.add(newBasicNameValuePair(“hidcanary”,canary));//add(新的BasicNameValuePair(“attach”,attachment.toString());add(新的BasicNameValuePair(“attach”,encodeToBase64(attachment.toString()));UrlEncodedFormEntity entity1=新的UrlEncodedFormEntity(参数);字符串fullUrl=baseUrl+“?ae=Dialog&t=Attach&a=Add”;postrl(fullUrl,EntityUtils.toByteArray(entity1));UrlEncodedFormEntity已经进行了编码,我想,再次对附件进行编码是否有任何区别?@preetha从何处向webview添加附件,从何处发送邮件?此代码用于上载附件。在这篇文章之后,我检查了回复,然后发送邮件。我编辑了我的代码。但同样地,收到的邮件没有附件。parameters.add(newBasicNameValuePair(“hidcanary”,canary));//add(新的BasicNameValuePair(“attach”,attachment.toString());add(新的BasicNameValuePair(“attach”,encodeToBase64(attachment.toString()));UrlEncodedFormEntity entity1=新的UrlEncodedFormEntity(参数);字符串fullUrl=baseUrl+“?ae=Dialog&t=Attach&a=Add”;postrl(fullUrl,EntityUtils.toByteArray(entity1));UrlEncodedFormEntity已经进行了编码,我想,再次对附件进行编码是否有任何区别?@preetha从何处向webview添加附件,从何处发送邮件?此代码用于上载附件。在这篇文章之后,我检查回复,然后发送邮件