1

重複としてマークしないでください。多くの例を試しましたが、問題は解決しませんでした。
私はアンドロイドが初めてで、画像ファイルを wcf サービスに送信したいと考えています。
以下のコードでこれを試しています:
バックグラウンドタスクへの呼び出し

servicemethodname = "RegisterUser?EmailId=" + emailID + "&Name=" + name
                + "&Mobile=" + mobile + "&IMEI=" + imei;
    DownloadWebPageTask bcktask = new DownloadWebPageTask();
        bcktask.execute(servicemethodname, path,bMap);

アンドロイドコード

package com.example.Wcfconsumer1;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.os.AsyncTask;
import android.util.Log;

public class DownloadWebPageTask extends AsyncTask<Object, Integer, String> {


    private final static String SERVICE_URI = "http://192.168.0.102:80/Service1.svc/";

    protected void onPostExecute(String result) {
        MainActivity.emailV.setText(result);
    }

    @Override
    protected String doInBackground(Object... params) {
        Bitmap image = (Bitmap)params[2];
        String msg = new String();
        String methodname = params[0].toString();
         try {
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                image.compress(CompressFormat.JPEG, 75, bos);
                byte[] data = bos.toByteArray();
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost postRequest = new HttpPost(SERVICE_URI+methodname);
                ByteArrayBody bab = new ByteArrayBody(data, "forest.jpg");
                // File file= new File("/mnt/sdcard/forest.png");
                // FileBody bin = new FileBody(file);
                MultipartEntity reqEntity = new MultipartEntity(
                        HttpMultipartMode.BROWSER_COMPATIBLE);
                reqEntity.addPart("uploaded", bab);
                reqEntity.addPart("photoCaption", new StringBody("sfsdfsdf"));
                postRequest.setEntity(reqEntity);
                HttpResponse response = httpClient.execute(postRequest);
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        response.getEntity().getContent(), "UTF-8"));
                String sResponse;
                StringBuilder s = new StringBuilder();

                while ((sResponse = reader.readLine()) != null) {
                    s = s.append(sResponse);
                }
                System.out.println("Response: " + s);
            } catch (Exception e) {
                Log.e(e.getClass().getName(), e.getMessage());
            }
        return msg;
    }
}

そしてwcfは以下のようなものです:

 [OperationContract]
        [WebInvoke(Method = "POST",
           UriTemplate = "RegisterUser?EmailId={EmailID}&Name={Name}&Mobile={Mobile}&IMEI={IMEI}",
           //BodyStyle = WebMessageBodyStyle.WrappedRequest,
           //RequestFormat= WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]
        string RegisterUser(string EmailID, string Name, string Mobile, long IMEI,Stream Profilepic);

リクエスト本文に画像を投稿しようとすると、実行メソッドが失敗することがわかりました。これを成し遂げるのを手伝ってください。多くのオプションと例を試しましたが、なぜそれが行われないのかわかりません。

4

1 に答える 1

0


carlosfigueira さん、返信ありがとうございます!!!
しかし、コードは正常に動作し、私が行っていた間違いは、「String s」で応答を収集しましたが、「String msg」を「onPostExecute」メソッドに返してビューに設定したため、そうではありませんでした。結果を得ています。したがって、このコードは問題なく正しいものです。


よろしくお願いします、
Sourabh

于 2013-06-30T18:44:26.043 に答える