1

Webview を使用して Exchange メール サーバーにデータを送信しています。( http 投稿は大きな添付ファイルを含むメールでは機能しなかったため、この方法を試しています)。

以下の私のコードを見てください。

エンコードなしでデータを送信すると、送信に失敗します。以下のコードに従って、データ全体のエンコードを行うと、それでも失敗します。

コメント付きのコードを試してみると、データを名前と値のペアとして保存し、それをエンコードすると、メールは受信されますが、添付ファイルはありません。では、ここでエンコーディングを行う正しい方法は何ですか? 添付ファイルのタイプは 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" に対してよりハードコーディングされていることがわかります。

4

3 に答える 3

1

添付ファイルを次のように変換してみてください

 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 へ

于 2013-10-09T10:11:33.247 に答える
0

MultipartEntity を使用してデータを 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) {
}
于 2013-10-09T08:30:34.897 に答える